基本上我的目标是创建一个部分视图,我可以将其包含在多个页面中,并根据参数加载它自己的值。我找不到任何直接允许这种行为的东西,正如我想要的那样。 我成功地破解了成功的结果但是对MVC不熟悉我很确定我做错了而且我想得到一些反馈我害怕有一些有用的东西但是完全有缺陷。
在任何需要显示面板的页面中我都必须这样做
@Html.Partial("_AsyncGroupList", valueOfParameterToPass)
@Html.Partial("_AsyncMailboxList", valueOfParameterToPass)
当我加载页面时,我得到的正是我想要的。
为实现这一目标,我必须做到以下几点。
对于两个面板,我需要看起来几乎完全相同的不同PartialView。在那些PartialViews中,我有一个ajax请求,它将加载另一个PartialView并将其放在面板中。第二个PartialView可以是任何类型,并拥有它自己独特的模型。
在下面的PartialView(_AsyncGroupList.cshtml)中,我使用GroupList操作调用ListController,这将返回一个将填充面板内容的PartialView
//_AsyncGroupList.cshtml
@using MVCTest.Controllers;
@model int
<div class="col-sm-4">
<div class="panel panel-default ">
<div class="panel-heading">Groups</div>
<div class="panel-body">
<p id="TheGroupsList"> <img src="../content/loading.gif" alt="Be patient..." /> LOADING... </p>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$.ajax({
type: "GET",
url: "../List/ShowGroupsList",
data: { id: @Model },
success: function (response) {
$('#TheGroupsList').html(response);
}
})
});
</script>
它是ListController
public class ListController : Controller
{
public ActionResult ShowGroupsList(int id)
{
var timer = new System.Diagnostics.Stopwatch();
timer.Start();
while (timer.Elapsed.Seconds < id) { //just wait }
timer.Stop();
//the partialView returned here could be any partialView with it's corresponding model.
return PartialView("_ListOfThings", new TestlistModel(id) { Name = "Groups" });
}
public ActionResult ShowMailBoxList(int id)
{
var timer= new System.Diagnostics.Stopwatch();
timer.Start();
while (timer.Elapsed.Seconds < id) { //just wait }
timer.Stop();
return PartialView("_ListOfThings", new TestlistModel(id) { Name="MailBox"});
}
我认为我需要两级PartialViews,因为它们不共享相同的模型。他们也可以拥有自己的控制器,而不是共享同一个控制器。
但它确实如此。我完全出去吃这个午餐吗?