有关生成ASP.NET MVC“创建”视图的问题

时间:2010-01-27 21:32:40

标签: .net asp.net asp.net-mvc

最简单的情况是,我正在为任务列表创建“创建视图”,我想允许用户通过下拉列表从相关表中选择“类别”。

我应该

  1. 创建一个包含Task和IEnumerable的自定义模型?
  2. 从“创建任务视图”中启动CategoryController并通过CategoryController上的方法绑定DDL?
  3. 我没想到的另一种选择?
  4. 哪种方法最适合MVC设计模式?您使用哪种,更重要的是为什么?

2 个答案:

答案 0 :(得分:2)

你可以做两件事:

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,因为它将大量代码移出控制器,并进入“显示此页面需要什么”-code,而不会使“如何显示数据”代码混乱。

所以实际上我有

  • 行为代码(控制器)
  • 通过加载辅助数据(ViewData对象)来准备视图的代码
  • 呈现视图的代码(.aspx)

通常我可以将EditDataModel重复用于编辑和创建。

答案 1 :(得分:0)

1是最“正确”的方式。

2是彻头彻尾的邪恶,你的背部处于webforms世界并抛弃了关注点的清晰分离。

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