代码之家  ›  专栏  ›  技术社区  ›  Nate CSS Guy

关于生成ASP.NETMVC“创建”视图

  •  0
  • Nate CSS Guy  · 技术社区  · 15 年前

    最简单的情况是,我正在为一个任务列表创建一个“Create View”,我希望允许用户通过dropdownlist从相关表中选择一个“Category”。

    1. 创建包含任务和IEnumerable的自定义模型?
    2. 从“创建任务视图”实例化CategoryController并通过CategoryController上的方法绑定DDL?
    3. 另一个我没想到的选择?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Soraz Krishnendu    15 年前

    你可以做两件事:

    a) 快速破解

    public ActionResult Create() {
     ViewData["myList"] = new SelectList( listOfCategories, "Name","CategoryId");
     return View()
    }
    
    Create.aspx
    ...
     <%= Html.DropDown("categoryId", ViewData["myList"] as SelectList,"-");
    ...
    

    b) 创建ViewDataModel。

    public class CreateProductViewData
    {
        public Product product { get; private set; };
        public SelectList Categories { get; private set; }
    
        public CreateProductViewData(Product p) {
              product = p;
              Categories = new SelectList( listOfCategories, "Name","CategoryId");
       }
    
    }
    
    public ActionResult Create()
    {
       Product p = new Product() { name="New Product..." } ;
       return View(new CreateProductViewData(p));
    }
    
    
    in Create.aspx
      ...Inherits="System.Web.Mvc.ViewPage<CreateProductViewData>" %>
    
      ..
      ..
      <%= Html.DropDown("CategoryId", Model.Categories, "-");
    

    我主要使用方法B,因为它将大量代码移出控制器,并进入“显示此页所需的内容”代码,而不会混淆“如何显示数据”代码。

    所以实际上我有

    • 通过加载辅助数据(ViewData对象)准备视图的代码
    • 呈现视图的代码(the.aspx)

    通常我可以重用ViewDataModel进行编辑和创建。

        2
  •  0
  •   John Farrell    15 年前

    1是最“正确”的方法。

    2是彻头彻尾的邪恶,你的背在网络表单世界和扔掉干净的分离关注。

    3是不必要的,因为我不知道你会得到多少而不是1。