2011-05-26 105 views
16

我們剛買了一臺新的Windows 2008 R2服務器,我想設置IIS 7.5中的一個MVC 3位點上的Razor視圖引擎。訪問默認路由時出現奇怪的錯誤。佈局的頁面「{}路徑」找不到

佈局頁 「〜/查看/共享/ _Layout.cshtml」 可能0​​不是在以下路徑找到: 「〜/查看/共享/ _Layout.cshtml」。

這很奇怪,因爲我明確地/views/home/index.cshtml內設置佈局就像這樣:

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

我100%肯定的是,/views/shared/_layout.cshtml存在於文件系統。這是一個截圖。

enter image description here

如果我從視圖中刪除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 

回答

21

好像你可能有權限問題。根據您提供的信息,這似乎是無法找到_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

IIS Anonymous Authentication user identity screen

+0

丁丁丁!謝謝。 – jessegavin 2011-05-27 19:12:49

+0

lolz,沒有問題。 ;-) – 2011-05-27 19:17:55

+0

我沒有搜索/共享視圖文件夾,想法? – Maslow 2012-12-11 16:24:37

2

由於qbantek發現,對我來說這是關係到_layout.cshtml文件生成操作被設置爲none。

它被設置爲無的原因是,我開始與一個空MVC項目模板和手動添加的_layout.cshtml文件到項目中。

如此教訓,當你有一個空的項目模板開始,您手動添加的佈局文件,你必須設置生成操作以及手動。

0

此問題有時可能與安全許可有關。 您確定有權限讀取/寫入文件夾/文件。

0

我的問題是包含舊文件路徑的.suo文件。我關閉了VS,刪除了我的suo文件,重新打開VS,並且工作正常。丁丁丁!