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

ASP.Net MVC 3 ViewModel with Drop Down Lists

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

我希望创建一个具有两个下拉列表的视图,每个下拉列表对应一个列表,以便用户可以选择然后运行报告。 为此,我创建了一个viewModel来表示两个下拉列表

1
2
3
4
5
public class ReportSiteCategorySearchViewModel
{
    public SelectList categoryList { get; set; }
    public SelectList siteList { get; set; }
}

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

1
2
3
4
5
6
7
8
9
10
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的视图,并将值写到下拉列表中

1
2
3
4
5
    <label for="ddlSite">Sites</label>
    @Html.DropDownList("ddlSite", Model.siteList,"All Sites")
   
    <label for="ddlCatgeory">Categories</label>
    @Html.DropDownList("ddlCatgeory", Model.categoryList,"All Categories")

这行得通,但是我不确定这是否是最好的方法。 我只是想知道我的方法是否正确,是否有更好的方法可以做到这一点? 即,如果我需要从其他表中再添加5/6下拉列表,我应该将其添加到当前的ViewModel中怎么办?

任何反馈将不胜感激。

谢谢。


您可以创建类型为List的viewModel。在您的控制器中,将每个表(作为您所做的SelectList)添加到该模型中。 然后将视图传递给模型,该模型是SelectLists的列表。

然后,您可以遍历视图中的每个值:

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

您可能需要修改SelectList列表以包含"标题"或"项目"字段。 通过这种方式,您可以继续向列表中添加元素,而无需更新视图。