具有下拉列表的ASP.Net MVC 3 ViewModel

时间:2011-10-26 14:46:47

标签: asp.net-mvc-3 drop-down-menu viewmodel

我正在开发一个ASP.Net MVC 3 Web应用程序。该应用程序当前连接到具有多个表的数据库,其中两个表是Category(catId,Name)和Site(siteID,Name)。

我希望创建一个包含两个下拉列表的视图,每个列表对应一个提到的表,以便用户可以选择并运行报表。为此,我创建了一个viewModel来表示两个下拉列表

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

然后在我的控制器中返回viewModel我有以下

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等吗?

非常感谢任何反馈。

谢谢。

1 个答案:

答案 0 :(得分: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列表以包含“标题”或“项目”字段。通过这种方式,您可以继续向List添加元素,并且您不需要更新视图。