Лучший подход для загрузки PartialView в зависимости от раскрывающегося списка (MVC)

Позвольте мне объяснить, что такое сценарий. На следующем изображении у меня есть раскрывающийся список и поле div, в раскрывающемся списке всегда есть два параметра, при изменении которых необходимо загрузить PartialView в поле div.

И когда страница загружается в первый раз, должна отображаться первая опция выпадающего списка.

введите здесь описание изображения

Сейчас я покажу вам свой код.

    [HttpGet]
    public ActionResult Monitor(short id, string viewBy = "class")
    {
        var model = db.Assignments.Find(id);

        List<SelectListItem> list = new List<SelectListItem>()
        {
            new SelectListItem() { Text = "Class", Value = "class" },
            new SelectListItem() { Text = "TEKS", Value = "teks" }
        };

        MonitorViewModel vm = new MonitorViewModel
        {
            AssignmentId = model.AssignmentId,
            AssignmentName = model.Name,
            ViewBy = list,
            SelectedView = viewBy
        };

        return View(vm);
    }

    public ActionResult MonitorContentView(short assignmentId, string viewBy)
    {
        if (viewBy.Equals("class"))
            return MonitorByClass(assignmentId);
        else
            return MonitorByTEKS(assignmentId);
    }

    public ActionResult MonitorByClass(short assignmentId) { ... }
    public ActionResult MonitorByTEKS(short assignmentId) { ... }

мой бритвенный взгляд

@model Contoso.MvcApplication.ViewModels.Stats.MonitorViewModel
@{
    ViewBag.Title = "Monitor";
}

<hgroup>
    <h2>Monitor</h2>
    <h3>@Model.AssignmentName</h3>
</hgroup>

<div>
    <span>View by: </span>@Html.DropDownListFor(model => Model.SelectedView, Model.ViewBy, new { id = "monitorViewByDropDown" })
</div>

@using (Html.BeginForm(new { id = "monitorForm" })) {
<div id="monitor-content-view">
    @Html.Action("MonitorByClass", new { assignmentId = @Model.AssignmentId })
</div>
}

Таким образом, когда пользователь меняет раскрывающееся значение, он должен получить частичное представление через AJAX (я до сих пор не реализовал), вызывая MonitorContentView, передавая в нем значение.

Что я делаю, это хорошая реализация? Или есть другой лучший подход? Я хочу знать, подходит ли способ загрузки частичного представления.


person Darf Zon    schedule 24.03.2013    source источник
comment
Вы можете использовать запуск загрузки в событии изменения с помощью jQuery. Вот пример. Динамическая загрузка частичных представлений   -  person lopezbertoni    schedule 24.03.2013


Ответы (1)


Если у вас есть сложное представление в monitor-content-view, которое возвращается либо MonitorByClass, либо MonitorByTEKS, то лучше всего вернуть ViewResult. Если каждое представление, представляющее два упомянутых метода, не такое уж сложное, то лучше вернуть результат json и заполнить свое представление на стороне клиента. Это еще лучше, если два представления имеют общие поля, где некоторые поля скрыты/отображены в зависимости от того, какой метод был вызван.

person von v.    schedule 24.03.2013
comment
На самом деле у каждого представления есть своя модель представления. Так что я думаю, что они не имеют одинаковых свойств - person Darf Zon; 24.03.2013