我不是在寻找javascript / jquery的答案。我能做到这一点,但我觉得它打破了目的。这似乎是没有javascript应该可能的事情。
我正在尝试使用简单的列表框选择来更新@Html.Partial部分,我不确定该怎么做。最初加载的一切都很好。但是,在我提交之后,我不太确定如何“附加”到我的部分视图来更新它。
此处的目的是仅加载列表框一次,让他们在不重新加载的情况下查看或请求任意数量的新报表。如果它不可能,那很好,我可以使用一个页面,重新加载列表框,它将工作。我只是不明白为什么每次查看或请求报告时我都需要去数据库重新加载列表框项目。
“master”html页面:
@using TCTReports.Models
@model ReportViewModel
<h2>My Reports</h2>
<div class="row">
<div class="col-md-6">
<h3>Select Report</h3>
@using (Html.BeginForm("GetReport", "Report"))
{
@Html.DropDownListFor(m => m.SelectedMyID, Model.myLB)
<input type="submit" value="View" />
}
</div>
<div class="col-md-6">
<h3>All Reports</h3>
@using (Html.BeginForm("ReqReport", "Report"))
{
@Html.DropDownListFor(m => m.SelectedAllID, Model.allLB)
<input type="submit" value="View" />
}
</div>
</div>
@Html.Partial("_Msg")
_Msg是超级简单的atm。它最终会成为一个报表查看器,现在,它会查看@Viewbag ...
<h2>@ViewBag.Message</h2>
控制器提交动作(我得到我选择的值就好了。目前无效,但是带有视图的ActionResult - 但我觉得这也不正确,因为它完全覆盖了页面(即使使用PartialView)也输了我的列表框和_layout ...):
public void GetReport(ReportViewModel model)
{
var myID = model.SelectedMyID;
ViewBag.Message = "Report: " + myID.ToString() + " Selected.";
//return PartialView("_Msg","Test");
}
public void ReqReport(ReportViewModel model)
{
var allID = model.SelectedAllID;
ViewBag.Message = "Report: " + allID.ToString() + " Requested.";
//return PartialView("_Msg", "Test");
}
好的,那么如何更新_Msg并仅刷新主html页面的@ Html.PartialView()部分呢?我曾短暂地和@sections一起玩,但没有取得多大进展。