ASP.Net MVC 3 ViewModel с выпадающими списками

#asp.net-mvc-3 #drop-down-menu #viewmodel

#asp.net-mvc-3 #выпадающее меню #viewmodel

Вопрос:

Я разрабатываю ASP.Net Веб-приложение MVC 3. В настоящее время приложение подключено к базе данных, содержащей несколько таблиц, две из которых — 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")
    amp;nbsp;amp;nbsp;
    <label for="ddlCatgeory">Categories</label>
    @Html.DropDownList("ddlCatgeory", Model.categoryList, "All Categories")
</div>
  

Это работает, однако я не уверен, что это лучший способ сделать это. Мне просто интересно, верен ли мой метод, есть ли лучший способ сделать это? Т.Е., Что, если мне понадобилось еще 5/6 выпадающих списков из других таблиц, должен ли я просто добавить в текущую ViewModel и т. Д.?

Любая обратная связь будет высоко оценена.

Спасибо.

Ответ №1:

Вы можете создать ViewModel типа List<SelectList> в вашем контроллере, добавить каждую таблицу (в виде списка выбора, как вы делаете) в эту модель. Затем передайте view модель, которая представляет собой список SelectLists.

Затем вы можете перебирать каждое значение в своем представлении:

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

Возможно, вам потребуется изменить свой список SelectList, чтобы включить поле «Заголовок» или «элементы». Делая это таким образом, вы можете продолжать добавлять элементы в список, и вам не нужно будет обновлять представление.