25

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

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

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

4

3 回答 3

68

在里面创建一个“~/Views/_ViewStart.cshtml”页面和以下内容:

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

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

现在默认情况下在一个空的 MVC3 项目中创建它。

来源

于 2011-01-05T23:28:04.693 回答
2

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

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

有关如何执行此操作的更多详细信息,请参阅 Microsoft 使用 Razor 构建页面的操作指南。我在第 169 页找到了在文件夹中运行文件之前和之后的代码部分。查看此Microsoft 下载页面以获取整本书以及其他 Razor 示例。

于 2010-08-24T14:42:56.397 回答
0

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

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

  1. 编写您自己的页面基类,它派生自 WebViewPage 并在构造函数中设置正确的布局......但在这种情况下,您必须@inherits在每个视图中指定一个指令。
  2. 在您的操作方法中设置布局覆盖(使用View(string viewName, string masterName)覆盖)。你可以编写一个中间控制器基类,它有一个辅助方法来省去到处重复布局的麻烦。
于 2010-08-24T18:16:09.533 回答