【问题标题】:Nested _ViewStart ignoring Layout setting嵌套 _ViewStart 忽略布局设置
【发布时间】:2012-03-21 23:23:48
【问题描述】:

在我的 Views 根文件夹中,我有 _ViewStart.cshtml,其中有:

@{
Layout = "~/Views/Shared/_Layout.cshtml";
Page.Title = "Using Root ViewStart!";
}

然后在嵌套的 Views\ProjectCharter 文件夹中,我有另一个 _ViewStart.cshtml,如下所示:

@{
    Layout = "~/Views/Shared/_ProjectLayout.cshtml";
    Page.Title = "Using Nested ViewStart!";
}

(请注意,_Layout.cshtml 和 _ProjectLayout.cshtml 文件都在同一个文件夹中,名为 Views\Shared)。

我遇到的问题是我的 Views\ProjectCharter 文件夹中的视图没有使用 _ProjectLayout.cshtml 布局...相反,它们仍在使用根 _Layout.cshtml(即使它们正确选择了“使用嵌套的 ViewStart”标题)。

有趣的是,如果我将 ActionMethod 更改为使用

返回视图
return View("Create","~/Views/Shared/_ProjectLayout.cshtml",newProjectCharter);

而不仅仅是

return View(newProjectCharter);

那么视图确实使用了 _ProjectCharterLayout.cshtml 布局。知道我缺少什么吗?我不想改变我所有的 ActionMethod 来使用这个更冗长的重载。

【问题讨论】:

  • 只是大声思考,但两个布局页面格式正确且名称空间正确?
  • 是的。如前所述,当我使用更详细的 return View() 重载时,它可以工作。如果命名空间或格式正确存在问题,使用更详细的重载也将不起作用。
  • this post。这似乎是 MVC3 上的一个问题:/ 但这家伙有一个很好的解决方案

标签: asp.net-mvc-3


【解决方案1】:

正如我从您的帖子中看到的,您指的是 _ProjectLayout.cshtml 位于“

视图\'PROJECTCHARTER'

但在代码中你说它在共享文件夹中:

Layout = "~/Views/ 'SHARED' /_ProjectLayout.cshtml";

希望能解决

【讨论】:

  • 不,很抱歉不清楚这一点...但是 _Layout.cshtml 和 _ProjectLayout.cshtml 文件都在同一个文件夹中,称为 Views\Shared;我将编辑我的帖子以明确这一点。
  • 在您在 ProjectCharter 控制器中使用的页面中,您不能在每个 .cshtml 页面的顶部添加一个 viewstart,而是手动添加布局?也就是在每一页的顶部加上Layout = "~/Views/Shared/_ProjectLayout.cshtml";
  • 是的,我可以,但这需要更改每个视图 - 违反 DRY 原则。
  • 看看这篇文章对你有没有帮助http://stackoverflow.com/questions/5161380/how-do-i-specify-different-layouts-in-the-asp-net-mvc-3-razor-viewstart-file
  • 是的,我阅读了我发布的那个问题 b4。实际上,正是从那个问题中,我得到了尝试重载我在问题中提到的 return View() 方法的提示。
猜你喜欢
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多