【问题标题】:How to use _Layout.cshtml in View when application is Razor Pages当应用程序是 Razor 页面时如何在视图中使用 _Layout.cshtml
【发布时间】:2019-10-28 18:04:02
【问题描述】:

在 Razor Pages 中,_Layout.chstml 是默认包含的(据我所知,某处有一个设置)。如果您不想在 Razor 页面上放置 _Layout 模板:

@{
    Layout = null;
}

但是,在 MVC 视图中,您引用了 _Layout.chstml:

@{
    ViewBag.Title = "ThankYou";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

我什至不确定是否可以使用相同的 _Layout。我希望如此,而且我只是没有 Razor Pages 应用程序(.NET Core 2.2 Razor Pages)中视图的路由语法。

我试过了:

@{
    ViewBag.Title = "ThankYou";
    Layout = "/Shared/_Layout.cshtml";
}

但它触发了 Not Found 错误。

【问题讨论】:

    标签: model-view-controller navigationbar razor-pages


    【解决方案1】:

    假设您想在 MVC 视图中使用 Razor Pages 布局,请使用虚拟文件路径,就像在您的 MVC 示例中一样:

    @{
        ViewBag.Title = "ThankYou";
        Layout = "~/Pages/Shared/_Layout.cshtml";
    }
    

    顺便说一下,R​​azor Pages 应用程序中布局页面的“设置”位于 _ViewStart.cshtml file 中。默认版本包括以下内容:

    @{
        Layout = "_Layout";
    }
    

    【讨论】:

    • 在我的 _Layout 页面中,引用 RouteData 的行出现空引用错误:"var pageRoute = ViewContext.RouteData.Values["page"].ToString();"所以,我会接受你的回答,但我必须弄清楚如何绕过没有 RouteData。
    • RouteData 存在,但 page 值仅与 Razor 页面相关。它在 MVC 视图中不存在。
    • 我想出了如何解决空引用问题。我正在将具有非常宽表格的 2 个页面的容器类更改为流体。我正在使用这个检查: var pageRoute = ""; if (ViewContext.RouteData.Values["page"]==null) { //单独保留 pageRoute } else { pageRoute = ViewContext.RouteData.Values["page"].ToString(); }
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 2021-02-14
    • 2018-01-26
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多