ChatGPT解决这个技术问题 Extra ChatGPT

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

我将 _viewstart.cshtml to automagically assign the same Razor Layout 用于我的视图。

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

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

这比在每个视图中添加 @Layout 指令更干。

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

这是一个假设项目,显示了 _viewstart.cshtml 文件、共享的 _layout.shtml 文件和一个局部视图(“AnonBar.cshtml”)。

https://dl.dropbox.com/u/58785/RazorPartialViewstart.PNG

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

@{
    Layout = "";
}

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

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

将所有部分视图放入一个公用文件夹,以便它们可以共享一个公用 _viewstart.cshtml。这打破了视图与其控制器位于同一文件夹中的约定。

不使用局部视图。

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

抱歉跑题了,但是文件名旁边的那些图标是什么? :) 某种源代码控制对吗?
@jitbit:VisualSVN

m
marcind

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


啊哈,不知道 PartialViewResult 类。这正是我所需要的。
作为后续,我发现我需要将操作方法的返回类型显式设置为 PartialViewResult 而不是通常的 ActionResult
@Portman 当操作方法的返回类型不是 ActionResult 时,您是否看到问题?我很惊讶这是一个问题,因为在这种情况下,MVC 运行时的行为不应该有任何不同(即只要操作方法返回的类型是 ActionResult 或任何从它派生的类都应该正常工作)。
@marcind 如果我将返回类型设置为 ActionResult,我会在 w3wp.exe 上得到堆栈溢出。如果返回类型为 PartialViewResult,则工作正常。认为我需要提交 Connect 错误?
对我来说听起来像 - 如果您提交 Connect 错误,请回喊,会投票赞成。