2010-01-27 44 views
0

最簡單的情況,我爲任務列表創建了「創建視圖」,並且我想讓用戶通過相關表格選擇「類別」一個下拉列表。關於生成ASP.NET MVC的問題「創建」視圖

我應該

  1. 創建一個包含任務和一個IEnumerable一個自定義模式?
  2. Instanciate從「創建任務視圖」的類別控制器,並通過在類別控制器上的方法綁定DDL?
  3. 我沒有想到的另一種選擇?

哪種方法最適合MVC設計模式?你使用哪一個,更重要的是爲什麼?

回答

0

1是最「正確」的方式。

2是徹頭徹尾的邪惡,你在webforms世界的背影,拋棄了關注的清晰分離。

3是不必要的,因爲我不知道你有多少收穫,而不是1

2

你可以做兩件事情:

一)快速破解

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)

通常,我可以重複使用ViewDataModel編輯和創建。