我想(在一个地方)在 Razor 中指定一个默认布局页面,以便我可以删除它:
@{ LayoutPage = "~/Views/Shared/_Layout.cshtml"; }
从我拥有的每个 .cshtml 文件中。但我不知道如何......有什么想法吗?我正在使用来自 ASP.NET MVC 3 Preview 1 的 Razor 引擎。
我想(在一个地方)在 Razor 中指定一个默认布局页面,以便我可以删除它:
@{ LayoutPage = "~/Views/Shared/_Layout.cshtml"; }
从我拥有的每个 .cshtml 文件中。但我不知道如何......有什么想法吗?我正在使用来自 ASP.NET MVC 3 Preview 1 的 Razor 引擎。
在里面创建一个“~/Views/_ViewStart.cshtml”页面和以下内容:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
请注意,您可以在此处编写代码,因此可以根据目标设备的类型等更改布局。
现在默认情况下在一个空的 MVC3 项目中创建它。
看起来这样做的方法是在视图目录的根目录中使用 _init.cshtml 文件,您希望在该目录中使用公共页面元素(标题)。当 Razor 视图引擎构建您的页面时,它会自动查找一些名为 _start.cshtml、_init.cshtml 和 _end.cshtml 的特定文件;这些文件由视图引擎为每个请求按各自的顺序加载。在这些文件中放置 LayoutPage 定义和/或其他常见的初始化操作将确保它们对所有页面都运行。
注意:我不确定效果是否会传递到子目录中,因为文档中并不清楚;你必须试一试并找出答案。
有关如何执行此操作的更多详细信息,请参阅 Microsoft 使用 Razor 构建页面的操作指南。我在第 169 页找到了在文件夹中运行文件之前和之后的代码部分。查看此Microsoft 下载页面以获取整本书以及其他 Razor 示例。
在 MVC 3 Preview 1 中没有简单的方法可以做到这一点。这是预览位的限制,将在即将发布的版本中解决。不幸的是_init.cshtml
,文件在这个 MVC3 预览版中不起作用,因此您无法遵循网页模式。
我有两种方法可以让它发挥作用(尽管都不是最佳的)
@inherits
在每个视图中指定一个指令。View(string viewName, string masterName)
覆盖)。你可以编写一个中间控制器基类,它有一个辅助方法来省去到处重复布局的麻烦。