最简单的情况是,我正在为任务列表创建“创建视图”,我想允许用户通过下拉列表从相关表中选择“类别”。
我应该
哪种方法最适合MVC设计模式?您使用哪种,更重要的是为什么?
答案 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,而不会使“如何显示数据”代码混乱。
所以实际上我有
通常我可以将EditDataModel重复用于编辑和创建。
答案 1 :(得分:0)
1是最“正确”的方式。
2是彻头彻尾的邪恶,你的背部处于webforms世界并抛弃了关注点的清晰分离。
3是不必要的,因为我不知道你获得了多少而不是1。