使用_viewstart.cshtml 和部分 Razor 视图的正确方法?

我使用 < strong > _ viewstart.cshtml 自动分配相同的 Razor 布局来表达我的观点。

这是一个非常简单的文件,位于我的视图文件夹的根目录中,如下所示:

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

这比将@Layout 指令添加到每个视图更加 DRY。

然而,这给 Razor 不完整视图带来了一个问题,因为它们运行 _ viewstart.cshtml 的内容,因此错误地为自己分配了一个布局,这使得它们不再是局部的。

下面是一个假设的项目,显示了 _ viewstart.cshtml 文件、 share _ layout.shtml 文件和一个部分视图(“ AnonBar.cshtml”)。

Example project structure

目前,我解决这个问题的方法是在每个部分视图中添加以下代码行:

@{
Layout = "";
}

这似乎是在 Razor 中将视图表示为局部视图的错误方式。(注意,与 web 表单视图引擎不同,部分视图的文件扩展名是相同的。)

我考虑过其他更糟糕的选择:

  • 将所有部分视图放入一个通用文件夹,这样它们就可以共享一个 common _ viewstart.cshtml。这打破了视图与其控制器位于同一文件夹中的惯例。
  • 不使用部分视图。

这是 Razor 视图引擎团队仍在充实的东西,还是我遗漏了一个基本概念?

59216 次浏览

如果从控制器执行 return PartialView()(而不是 return View()) ,那么将不执行 _viewstart.cshtml