如何在剃刀视图中指定全局 MVC 布局而不指定布局路径

Mik*_*Dub 5 c# asp.net-mvc inheritance razor asp.net-mvc-4

我试图避免在我拥有/创建的每个 Razor 视图中手动指定布局路径。

因此,在剃刀视图中,您通常会指定视图/布局属性,例如:

@{
    ViewBag.Title = "About Us";
    Layout = "~/Views/Shared/_ContentLayout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

我有一个基本控制器,我的所有控制器都继承了它,我希望能够在这个级别指定布局,或者在 app_start 等中指定布局。

对于任何例外,我只会在视图本身中覆盖它。

经过广泛的搜索,我还没有找到任何人能够做到这一点的证据。

我当前的下一个最佳解决方法是在 ViewBag 中指定它,以保持动态,但我仍然需要在视图中放置一个声明:

@{
  Layout = ViewBag.Layout;
}
Run Code Online (Sandbox Code Playgroud)

是否可以?解决方案?

Nko*_*osi 5

参考:http : //weblogs.asp.net/scottgu/asp-net-mvc-3-layouts

由于 MVC3 有一个约定,其中......

您可以\Views在项目文件夹下添加一个名为 _ViewStart.cshtml(或 VB 的 _ViewStart.vbhtml)的文件:

_ViewStart 文件可用于定义要在每个视图渲染开始时执行的公共视图代码。例如,我们可以在 _ViewStart.cshtml 文件中编写代码,以编程方式将每个 View 的 Layout 属性设置为_ContentLayout.cshtml默认文件:

@{Layout = "~/Views/Shared/_ContentLayout.cshtml";}
Run Code Online (Sandbox Code Playgroud)

因为这段代码在每个视图的开始执行,我们不再需要在任何单独的视图文件中显式设置布局(除非我们想覆盖上面的默认值)。