ASP.Net MVC 3 ViewModel с выпадающими списками
Я занимаюсь разработкой веб-приложения ASP.Net MVC 3. В настоящее время приложение подключено к базе данных, содержащей несколько таблиц, две из которых - это категория (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")
<label for="ddlCatgeory">Categories</label>
@Html.DropDownList("ddlCatgeory", Model.categoryList, "All Categories")
</div>
Это работает, однако, я не уверен, что это лучший способ сделать это. Мне просто интересно, мой метод правильный, есть ли лучший способ сделать это? То есть, что если мне нужно еще 5/6 выпадающих списков из других таблиц, я должен просто добавить в текущую viewModel и т. Д.?
Любая обратная связь будет высоко ценится.
Благодарю вас.
1 ответ
Вы можете создать viewModel типа List<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, включив в него поле "Заголовок" или "Элементы". Делая это таким образом, вы можете продолжать добавлять элементы в список, и вам не нужно будет обновлять представление.