某些页面的部分视图SPA,其他人使用RenderBody

时间:2014-01-06 04:21:46

标签: asp.net-mvc asp.net-mvc-4 jquery razor single-page-application

我有一个MVC 4(Razor)应用程序正在转换为类似于SPA单页应用程序的更多内容。它不是纯粹的SPA - 其中5个页面使用Ajax加载到body部分,而其他一次性页面不需要使用Ajax。

除了主页索引页面外,我一切正常。我需要链接回索引,但我想继续使用一个布局母版页。问题是我无法弄清楚如何有时加载局部视图,然后其他时候使用布局母版渲染页面。

我需要为非Ajax页面保留@RenderBody。

<body>
   <section id="BodySection">
     @RenderBody 
   </section>
</body>

对于Ajax页面,在导航按钮上单击我使用JQ将部分视图转换为#BodySection。

function LoadPage(actionarg, controllerarg) {
        var link = '@(Url.Action("action", "controller"))';
        link = link.replace("action", actionarg);
        link = link.replace("controller", controllerarg);

        $.ajax({
            url: link,
            type: "POST",
            cache: false,
            async: true,
            data: { data: '' },
            success: function (result) {
                $("#BodySection").html(result);
            }
        });
    }

如何混合两种类型的页面加载?

1 个答案:

答案 0 :(得分:1)

不确定这是否是最实用的方法,但这就是我处理它的方式:

首先创建2个视图,我将它们称为“page.cshtml”和“partialpage.cshtml”,以及2个动作(或者你可以将它们分成2个控制器,具体取决于你的请求),让我们称之为“somecontroller / page” “和”somecontroller / partialpage“

partialpage.cshtml:

@{
    Layout = "";
}
@*Exact page content here*@

page.cshtml

@{
    Layout = "Your master layout directory";
}
@Html.Action("somecontroller","partialpage")

当您需要将页面视为部分视图时,请使用部分页面操作,当您需要包含主视图的整页时,请使用页面操作。

这只是我自己的方式,如果有人知道任何实际的方法,请告诉我。

感谢。