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")
    &nbsp;&nbsp;
    <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, включив в него поле "Заголовок" или "Элементы". Делая это таким образом, вы можете продолжать добавлять элементы в список, и вам не нужно будет обновлять представление.

Другие вопросы по тегам