找不到布局页面"{path}"

jes*_*vin 16 iis-7.5 razor asp.net-mvc-3

我们刚刚获得了一台新的Windows 2008 R2服务器,我正在尝试使用Razor View Engine在IIS 7.5中建立一个MVC 3站点.当我访问默认路由时,我收到一个奇怪的错误.

在以下路径中找不到布局页面"〜/ Views/Shared/_Layout.cshtml":"〜/ Views/Shared/_Layout.cshtml".

这很奇怪,因为我从内部明确设置了Layout,/views/home/index.cshtml如下所示:

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

我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
Run Code Online (Sandbox Code Playgroud)

que*_*rin 21

好像你可能有权限问题.根据您提供的信息,它似乎是无法找到_Layout.cshtml文件的最可能原因.

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

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

这是一个猜测,但似乎这个家伙几乎完全相同的问题.

IIS匿名身份验证用户身份屏幕

  • 我遇到了同样的问题:确保_Layout.cshtml文件的Build Action设置为'Content'! (3认同)