如何在ASP.NET MVC 3预览1中指定Razor中的默认LayoutPage?

时间:2010-08-24 14:26:54

标签: asp.net-mvc-3 razor

我想在Razor中指定(在一个地方)默认布局页面,以便我可以删除它:

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

来自我的每个.cshtml文件。但我不知道怎么......有什么想法吗?我正在使用ASP.NET MVC 3 Preview 1中的Razor引擎。

3 个答案:

答案 0 :(得分:68)

创建一个“〜/ Views / _ViewStart.cshtml”页面,内容如下:

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

请注意,您可以在此处编写代码,因此可以根据目标设备的类型等更改布局。

现在默认在空的MVC3项目中创建。

Source

答案 1 :(得分:2)

看起来这样做的方法是在视图目录的根目录中使用_init.cshtml文件,在该目录中您需要一个公共页面元素(标题)。当Razor视图引擎构建您的页面时,它会查找一些自动名为_start.cshtml,_init.cshtml和_end.cshtml的特定文件。视频引擎为每个请求按顺序加载这些文件。将LayoutPage定义和/或其他常见初始化操作放在这些文件中将确保它们针对所有页面运行。

注意:我不确定效果是否传递到子目录中,因为文档中不清楚;你必须尝试一下才能找到答案。

有关如何在使用Razor构建页面的Microsoft操作方法书中找到的有关如何执行此操作的详细信息。我在第169页找到了在文件夹中运行代码前后文件部分。检查此Microsoft download page以获取完整的书籍以及其他Razor示例。

答案 2 :(得分:0)

在MVC 3 Preview 1中没有简单的方法可以做到这一点。这是预览位的限制,将在即将发布的版本中解决。遗憾的是,_init.cshtml文件在MVC3的预览中不起作用,因此您无法遵循网页模式。

我有两种方法可以让它发挥作用(虽然两者都不是最佳的)

  1. 编写自己的页面基类,它派生自WebViewPage并在构造函数中设置正确的布局......但在这种情况下,您必须在每个视图中指定@inherits指令。
  2. 在操作方法中设置布局覆盖(使用View(string viewName, string masterName)覆盖)。你可以编写一个中间控制器基类,它有一个帮助方法,可以避免在任何地方重复布局的麻烦。