asp.net-mvc - 强制所有区域使用相同的布局

标签 asp.net-mvc razor asp.net-mvc-routing asp.net-mvc-areas

我有以下项目结构:

  • /Views/Shared/_Layout;

  • /Areas/Area1/Views/ControllerName/Index;

...

  • /Areas/AreaN/Views/ControllerName/Index。

有没有办法强制所有区域使用_Layout作为基本布局

有没有办法在不添加_ViewStart文件的情况下做到这一点(例如,通过路由配置)?

另请参阅:

How do I specify different Layouts in the ASP.NET MVC 3 razor ViewStart file?

最佳答案

您只需添加一个名为:

的文件
_ViewStart.cshtml

在每个区域 View 文件夹下:

/Areas/Area1/Views/_ViewStart.cshtml

并编辑文件以指向根布局,如下所示:

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

为了使其工作,您不必在 View 的布局属性中指定值,如果这样做,您将覆盖全局布局

注意:正如托尼提到的,您可以编辑每个 View 的布局属性以指向根布局,但这不是推荐的方法,因为您会将 View 与布局耦合起来改变它会很痛苦

编辑 1

如果您想使用代码来设置默认 View 的布局,也许您应该考虑编写自定义 View 引擎。

尝试在 google 上搜索自定义 RazorViewEngineRazorView

这篇文章可能是一个很好的起点

http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx

我还没有做过这样的事情,但我希望我能为你指明正确的方向

关于asp.net-mvc - 强制所有区域使用相同的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13277126/

相关文章:

c# - Webforms vs Razor vs MVC 和工业用途

c# - 在 MVC 3 中对多个 View 使用相同的 Controller

asp.net-mvc - ViewModel 集合属性在 MVC 3 中回发到 Controller 操作后丢失值

c# - 使用 Razor Pages 在 Asp.NET Core 2.2 中找不到 ViewComponent

c# - 使用属性和约定路由

c# - mvc同一站点的多个路由

c# - 如何防止 Web API 将我的模型从 JSON 序列化为字符串

asp.net-mvc - 使用 Entity Framework 4.1 创建复合主键

asp.net-mvc - 如何配置 ASP.NET MVC 路由以隐藏 "home"页面上的 Controller 名称?

asp.net-mvc - 带有 Entity Framework 的 ASP.NET MVC