Asp.net mvc 3 带有下拉列表的ASP.Net MVC 3视图模型

Asp.net mvc 3 带有下拉列表的ASP.Net MVC 3视图模型,asp.net-mvc-3,drop-down-menu,viewmodel,Asp.net Mvc 3,Drop Down Menu,Viewmodel,我正在开发一个ASP.NETMVC3Web应用程序。该应用程序当前连接到一个数据库,该数据库有多个表,其中两个表是CategorycatId、Name和SiteId、Name 我希望创建一个视图,该视图有两个下拉列表,其中一个用于所提到的每个表,以便用户可以从中进行选择,然后运行报表。为此,我创建了一个viewModel来表示两个下拉列表 public class ReportSiteCategorySearchViewModel { public SelectList category

我正在开发一个ASP.NETMVC3Web应用程序。该应用程序当前连接到一个数据库,该数据库有多个表,其中两个表是CategorycatId、Name和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等

如有任何反馈,将不胜感激


谢谢。

您可以在控制器中创建列表类型的viewModel,在对该模型执行操作时,将每个表添加为SelectList。然后将视图传递给模型,该模型是SelectList的列表

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

<div>
@foreach(SelectList SL in Model)
{
   <label for="ddl"+SL>SL.Title</label>
   @Html.DropDownList("ddl"+SL.Title, sl.list, sl.items")
}
您可能需要修改SelectList列表以包含“标题”或“项目”字段。通过这种方式,您可以继续向列表中添加元素,而无需更新视图