2011-04-11 141 views
0

我有以下問題。在我的解決方案中,我有兩個控制器:家庭和帳戶。一切工作到目前爲止。但是,當我添加[授權]以上的HomeController如ASP.NET MVC 3部分視圖未找到

[Authorize] 
public class HomeController : Controller 
{ 
... 

我得到

System.InvalidOperationException: The partial view 'Repository' was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Account/Repository.aspx 
~/Views/Account/Repository.ascx 
~/Views/Shared/Repository.aspx 
~/Views/Shared/Repository.ascx 
~/Views/Account/Repository.cshtml 
~/Views/Account/Repository.vbhtml 
~/Views/Shared/Repository.cshtml 
~/Views/Shared/Repository.vbhtml 

局部視圖倉庫裏面的HomeController所以因此它認爲是在〜/瀏覽/首頁/ Repository.cshtml,但它是分享在共享或帳戶文件夾中。正如我所說,如果沒有[Authorize]上面的HomeController類,一切都按預期工作。

發生錯誤的代碼是在_Layout.cshtml

@Html.Partial("Repository") 

感謝您的幫助。

回答

9

_Layout.cshtml是整個應用程序的母版頁。發生什麼事是您的家庭控制器正在查找已通過身份驗證的用戶,發現該用戶未通過身份驗證並重定向到賬戶控制器中的登錄操作。然後,該操作將呈現其視圖,該視圖使用_Layout.cshtml母版頁來呈現局部視圖,但無法找到它,因爲它不在Account文件夾中。

簡答:您的母版頁中的部分視圖應位於〜/ Views/Shared目錄中。或者將該部分調用移動到只能在主控制器上下文中運行的頁面。

+0

好吧我現在明白了,謝謝。 – user433947 2011-04-11 21:59:35

0

此外,請檢查以下內容:確保輸出類型設置爲相關頁面的內容。這是同行Joe F.向我指出的。無論出於何種原因,有時輸出不能正確設置。因此,當您宣傳您的應用程序時,不會複製cshtml文件。

0

當您在actionresult之上使用[Authorize]之類的屬性時,這意味着特定View需要具有管理員安全權限或其他權限。這可以通過進入web.config並設置自動化來解決。例如

<location path="Admin/Repository.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="Administrators,content managers" /> 
     <deny users="*" /> 
     </authorization> 
    </system.web> 
    </location>