0

シナリオとは何かを説明しましょう。次の画像では、ドロップダウンと div ボックスがあります。ドロップダウンには常に 2 つのオプションがあります。これが変更された場合、div ボックスに PartialView をロードする必要があります。

そして、ページが初めてロードされると、ドロップダウンの最初のオプションが表示されます。

ここに画像の説明を入力

それでは、私のコードをお見せします。

    [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>
}

MonitorContentViewしたがって、ユーザーがドロップダウン値を変更するときは、値を渡す呼び出しを呼び出して AJAX (まだ実装していません) を介して部分ビューを取得する必要があります。

私がやっているのは良い実装ですか?または、別のより良いアプローチがありますか?部分ビューの読み込み方法が正しいかどうかを知りたいです。

4

1 に答える 1

0

に複雑なビューがある場合、それはまたはmonitor-content-viewによって返されます。上記の 2 つのメソッドを表す各ビューがそれほど複雑でない場合は、json の結果を返し、クライアント側でビューを設定することをお勧めします。2 つのビューが共通のフィールドを共有し、呼び出されたメソッドに基づいて一部のフィールドが非表示/表示される場合、これはさらに優れています。MonitorByClassMonitorByTEKSViewResult

于 2013-03-24T17:44:47.487 に答える