シナリオとは何かを説明しましょう。次の画像では、ドロップダウンと 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 (まだ実装していません) を介して部分ビューを取得する必要があります。
私がやっているのは良い実装ですか?または、別のより良いアプローチがありますか?部分ビューの読み込み方法が正しいかどうかを知りたいです。