2011-10-26 173 views
1

我正在開發一個ASP.Net MVC 3 Web應用程序。該應用程序當前連接到具有多個表的數據庫,其中兩個是Category(catId,Name)和Site(siteID,Name)。ASP.Net MVC 3 ViewModel與下拉列表

我希望創建一個包含兩個下拉列表的視圖,每個表提供一個表,以便用戶可以選擇並運行報表。要做到這一點,我創建一個視圖模型來表示兩個下拉列表

public class ReportSiteCategorySearchViewModel 
{ 
    public SelectList categoryList { get; set; } 
    public SelectList siteList { get; set; } 
} 

然後在我的控制器返回視圖模型我有以下

public ActionResult getEquipmentByCategoryAndSite() 
    { 
     ReportSiteCategorySearchViewModel viewModel = new ReportSiteCategorySearchViewModel 
     { 
      categoryList = new SelectList(categoryService.GetAllCategories().ToList(), "categoryID", "categoryTitle"), 
      siteList = new SelectList(siteService.GetAllSites().ToList(), "siteID", "title") 
     }; 

     return View(viewModel); 
    } 

然後我傳遞給它取這個觀點viewModel並寫出價值的下拉

<div> 
    <label for="ddlSite">Sites</label> 
    @Html.DropDownList("ddlSite", Model.siteList, "All Sites") 
    &nbsp;&nbsp; 
    <label for="ddlCatgeory">Categories</label> 
    @Html.DropDownList("ddlCatgeory", Model.categoryList, "All Categories") 
</div> 

這個作品,但是,我不知道這是最好的方式來做到這一點。我只是想知道我的方法是否正確,有沒有更好的方法來做到這一點?也就是說,如果我需要從其他表中添加5/6以上的下拉列表,應該只添加到當前的viewModel等?

任何反饋將不勝感激。

謝謝。

回答

0

您可以創建一個List<SelectList>類型的viewModel在您的控制器中,將每個表(作爲SelectList)添加到此模型中。然後傳遞查看模型,這是一個SelectLists列表。

然後,你可以通過在你的視圖中的每個值迭代:

<div> 
@foreach(SelectList SL in Model) 
{ 
    <label for="ddl"+SL>SL.Title</label> 
    @Html.DropDownList("ddl"+SL.Title, sl.list, sl.items") 
} 

您可能需要修改的SelectList的列表,包括「標題」或「項目」字段。通過這樣做,您可以不斷添加元素到列表中,而且您不需要更新視圖。