使用partialview时刷新部分

时间:2013-04-09 12:23:35

标签: c# .net asp.net-mvc asp.net-mvc-4

我有_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渲染部分时

谢谢,

3 个答案:

答案 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);
    }
});

由于