2011-10-26 243 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的列表,包括“标题”或“项目”字段。通过这样做,您可以不断添加元素到列表中,而且您不需要更新视图。