【问题标题】:The layout page "{path}" could not be found找不到布局页面“{path}”
【发布时间】:2011-05-26 22:00:42
【问题描述】:

我们刚刚获得了一个新的 Windows 2008 R2 服务器,我正在尝试使用 Razor 视图引擎在 IIS 7.5 中设置一个 MVC 3 站点。我在访问默认路由时遇到了一个奇怪的错误。

布局页面 “~/Views/Shared/_Layout.cshtml”可以 在以下路径中找不到: “~/Views/Shared/_Layout.cshtml”。

这很奇怪,因为我在 /views/home/index.cshtml 中明确设置了布局,如下所示:

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

我 100% 确定 /views/shared/_layout.cshtml 存在于文件系统中。这是截图。

如果我从视图中删除Layout = "~/Views/Shared/_Layout.cshtml";,页面将完全呈现/home/index.cshtml 的内容(没有来自_Layout.cshtml 的任何代码)。我还尝试使用_ViewStart.cshtml 设置布局。

有人知道为什么 MVC 不能“找到”布局文件吗?该网站在 Visual Studio 的内置 Web 服务器中运行时运行良好。

这是我的堆栈跟踪:

[HttpException (0x80004005): The layout page "~/Views/Shared/_Layout.cshtml" could not be found at the following path: "~/Views/Shared/_Layout.cshtml".]
   System.Web.WebPages.WebPageExecutingBase.NormalizeLayoutPagePath(String layoutPage) +204956
   System.Web.WebPages.WebPageBase.PopContext() +150
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +784900
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371

【问题讨论】:

    标签: asp.net-mvc-3 razor iis-7.5


    【解决方案1】:

    看来您可能有权限问题。根据您提供的信息,这似乎是无法找到 _Layout.cshtml 文件的最可能原因。

    在 Server 2008 和 IIS 7 中,应用程序池有自己的用于 ACL 的标识(名为 IIS AppPool{App Pool Name}),这些标识是 IIS_IUSRS 组的一部分。此外,您的默认 inetpub/wwwroot 目录将具有 IIS_ISRS 组的读取权限。因此,如果您没有获得所需的权限,我会认为应用程序池实际上并没有以正确的身份运行。

    身份可能不正确的一个原因是匿名身份验证用户身份的设置。进入站点(或整个服务器)的身份验证控件并编辑匿名身份验证规则以作为应用程序池标识运行。

    这有点猜测,但似乎是this fellow had nearly the exact same issue

    【讨论】:

    • 我的根本没有搜索 /shared views 文件夹,想法?
    • 我遇到了同样的问题:确保 _Layout.cshtml 文件的构建操作设置为“内容”!
    • 我的问题已通过将所有权限分配给整个项目文件夹(包括 Views 文件夹)的应用程序池标识来解决。所以这个错误实际上是不正确的,因为它被发现了,但无法访问。将另一点归结为另一个极其愚蠢和具有欺骗性的 Microsoft 错误消息。
    【解决方案2】:

    正如 qbantek 发现的那样,对我来说,这与 _layout.cshtml 文件构建操作设置为无有关。

    设置为 none 的原因是我从一个空的 mvc 项目模板开始,并手动将 _layout.cshtml 文件添加到项目中。

    因此吸取了教训,当您从一个空的项目模板开始并手动添加布局文件时,您还必须手动设置构建操作。

    【讨论】:

      【解决方案3】:

      这个问题有时可能与安全权限有关。 您确保在文件夹/文件中具有读/写权限。

      【讨论】:

        【解决方案4】:

        我的问题是 .suo 文件包含旧文件路径。我关闭了VS,删除了我的suo文件,重新打开了VS,它工作正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-06
          • 2021-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-30
          相关资源
          最近更新 更多