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

Por*_*man 155 razor asp.net-mvc-3

我正在使用_viewstart.cshtml自动为我的视图分配相同的Razor布局.

它是我的Views文件夹根目录中的一个死的简单文件,如下所示:

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

这比将@Layout指令添加到每个视图更干.

但是,这对Razor 局部视图造成了问题,因为它们运行_viewstart.cshtml的内容,因此错误地为自己分配了一个布局,这使得它们不再是局部的.

这是一个假设项目,显示_viewstart.cshtml文件,共享_layout.shtml文件和部分视图("AnonBar.cshtml").

示例项目结构

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

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

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

我考虑的其他选项,但更糟糕的是:

  • 将所有部分视图放入公共文件夹,这样他们就可以共享一个共同的_viewstart.cshtml.这会破坏与其控制器位于同一文件夹中的视图约定.
  • 不使用部分视图.

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

mar*_*ind 234

如果您return PartialView()来自控制器(而不是return View()),则_viewstart.cshtml不会执行.

  • 啊哈,不知道'PartialViewResult`类.这就是我所需要的. (6认同)
  • 作为后续,我发现我还需要**也明确将action方法的返回类型设置为`PartialViewResult`而不是通常的`ActionResult`. (6认同)
  • 当Action方法的返回类型不是`ActionResult`时,你是否看到了问题?我很惊讶这是一个问题,因为在这种情况下MVC运行时不应该有任何不同的行为(即只要action方法返回的类型是`ActionResult`或任何从它派生的类就应该工作). (2认同)