我有_Layout.cshtml
,内容是:
...
@RenderSection("MyTitle", required: false)
<div class="innerLR">
<div id="appContent">
@RenderBody()
</div>
</div>
...
启动应用程序时,我转到此操作
Home/Index
,即视图public ActionResult Index()
{
return View(new BaseModel { Title = "Testing"});
}
查看Index.cshtml:
@section MyTitle{ @Model.Title }
bla bla bla
目前还可以,我看到了:Testing + bla bla bla。
现在,当我单击链接时,我通过Ajax调用
Home/SecondAction
,控制器将返回PartialView并在appContent
div中显示内容。我这样称呼:
$.ajax({
url: 'Home/SecondAction',
type: 'POST',
data: {},
success: function (result) {
$(#appContent).html(result);
}
});
动作是:
public ActionResult SecondAction()
{
return PartialView(new BaseModel { Title = "Other Title" });
}
SecondAction.cshtml是:
@section MyTitle{ @Model.Title }
bla bla again
在这里这行不通,我会遇到任何错误,但是我可以从第一个操作中获得文本,而不是:
其他Titla bla bla再次
要恢复,我想在返回
PartialView
时从_Layout.cshtml
渲染一个部分谢谢,
最佳答案
在AJAX调用之后,您似乎正在尝试更新DOM的2个不同部分。一种实现方法是让您的控制器动作将2个部分的渲染结果返回为JSON:
public ActionResult SecondAction()
{
return Json(new
{
section1 = RenderPartialViewToString("_Partial1", null),
section2 = RenderPartialViewToString("_Partial2", new BaseModel { Title = "Other Title" }),
});
}
现在您的AJAX调用看起来像这样:
$.ajax({
url: 'Home/SecondAction',
type: 'POST',
success: function (result) {
// TODO: you should of course wrap the contents of section 1 in a div with
// id="section1" in your _Layout.cshtml
$('#section1').html(result.section1);
$('#appContent').html(result.section2);
}
});
现在您可能想知道
RenderPartialViewToString
方法从何而来?它来自here
。或根据需要从here
发送。关于c# - 使用partialview时刷新部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15901810/