我有_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/

10-11 13:05