我有_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
此时没关系,我看到:测试+ 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
渲染部分时
谢谢,
答案 0 :(得分:2)
在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
开始。
答案 1 :(得分:0)
使用firebug并在控制台中查找错误或Chrome网络工具(在Chrome中点击F12),
应为$('#appContent').html(result);
确保您拥有IndexPartial View
确保此视图未使用母版页/布局
答案 2 :(得分:0)
我深深地看到你的代码在$ .ajax中调用SecondAction
,即:url: 'Home/SecondAction'
。
但您的操作方法名称为IndexPartial
,即:
public ActionResult IndexPartial()
{
return PartialView(new BaseModel { Title = "Other Title" });
}
请更改您的$ .ajax语句:
$.ajax({
url: 'Home/IndexPartial',
type: 'POST',
data: {},
success: function (result) {
$(#appContent).html(result);
}
});
由于