【问题标题】:Partial View SPA for Some Pages With a RenderBody for Others某些页面的部分视图 SPA,其他页面的 RenderBody
【发布时间】:2014-01-06 04:21:46
【问题描述】:

我有一个 MVC 4 (Razor) 应用程序正在被转换为更像一个 SPA 单页应用程序。它不是纯粹的 SPA——5 个页面使用 Ajax 加载到正文部分,而其他一次性页面不需要使用 Ajax。

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

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

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

对于 Ajax 页面,在导航按钮上单击我使用 JQ 将部分视图 Ajax 到#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);
            }
        });
    }

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

【问题讨论】:

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


    【解决方案1】:

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

    首先创建 2 个视图,我将它们称为“page.cshtml”和“partialpage.cshtml”,以及 2 个操作(或者您可以将它们分成 2 个控制器,根据您的要求),我们将它们称为“somecontroller/page” " 和 "somecontroller/partialpage"

    部分页面.cshtml:

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

    page.cshtml

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

    当您需要页面作为部分视图时,请使用部分页面操作,当您需要带有主视图的完整页面时,请使用页面操作。

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

    谢谢。

    【讨论】:

    • 这对我拥有的视图组织有效且有意义。我将我的索引设置为@Html.Partial("_Home"),并创建了一个新的 Home 部分,如您的 partialpage.cshtml。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2020-10-05
    • 2011-04-11
    • 2015-02-18
    相关资源
    最近更新 更多