根据下拉列表(MVC)加载部分视图的最佳方法

时间:2013-03-24 16:55:16

标签: asp.net-mvc jquery asp.net-mvc-4 asp.net-mvc-partialview

让我解释一下这个场景。在下图中,我有一个下拉列表和一个div框,下拉列表总是有两个选项,当这个更改时,我必须在div框中加载一个PartialView。

当页面第一次加载时,应该显示下拉列表的第一个选项。

enter image description here

现在我要告诉你我的代码。

    [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传递其中的值。

我正在做的是一个很好的实现?还是有另一种更好的方法吗? 我想知道加载局部视图的方法是否合适。

1 个答案:

答案 0 :(得分:0)

如果您在monitor-content-view中有一个复杂的视图,该视图由MonitorByClassMonitorByTEKS返回,那么您最好返回ViewResult。如果每个代表上述两种方法的视图并不复杂,那么最好返回一个json结果并在客户端填充您的视图。如果两个视图共享公共字段,其中某些字段根据调用的方法隐藏/显示,则会更好。