2012-08-07 61 views
0

我創建了一個自定義AuthorizeAttribute,如果用戶無權查看請求的控制器,則會將其發送到錯誤頁面。MVC Not Loading完整視圖

重定向他們是如下代碼:

Protected Overrides Sub HandleUnauthorizedRequest(filterContext As AuthorizationContext) 
    Dim result = New ViewResult() 
    result.ViewName = "Error" 
    result.ViewBag.ErrorMessage = "oops, you are not allowed" 
    filterContext.Result = result 
End Sub 

據其重定向到~/Shared/Error.vbhtml,就像它應該;但是,頁面只加載我的佈局,並且包含標題"Error",但不會加載錯誤頁面的任何內容。是

錯誤頁面的內容如下:

@ModelType System.Web.Mvc.HandleErrorInfo 

@Code 
    ViewData("Title") = "Error" 
End Code 

@ViewBag.ErrorMessage 

<h2> 
    Sorry, an error occurred while processing your request. 
</h2> 

爲什麼沒有加載「對不起,發生了錯誤...」的消息,我怎麼可以把它做呢?謝謝。

+0

你可能想看看[這裏](http://stackoverflow.com/問題/ 5070339/custom-authorize-attribute)和[this](http://stackoverflow.com/questions/4664302/mvc-roleprovider-and-authorize-attribute)鏈接 – Yasser 2012-08-07 17:41:49

+0

你確定'〜/ Views/Shared/Error.vbhtml'視圖正在呈現?有沒有其他的觀點可以使用?像'Error.cshtml'一樣? – 2012-08-07 17:43:24

+0

@Darin:是的,因爲當我將result.ViewName =「Error」更改爲result.ViewName =「Error1」時,它給我一個錯誤。 – user1477388 2012-08-07 17:44:22

回答

1

它重定向他們〜/共享/ Error.vbhtml,就像它應該

沒有,我懷疑這是不是這樣的。您可能還有其他正在呈現的Error.cshtmlError.vbhtml視圖。在其他位置搜索您的站點以查找此類文件。例如~/Views/XXX/Error.vbhtml其中XXX是當前正在執行的控制器。

或者你也可以顯式地指定要加載的,而不是依靠建立的探測位置哪種觀點:

result.ViewName = "~/Views/Shared/Error.vbhtml" 
+0

您是對的。我怎樣才能讓它專門查找「〜/ Shared/Error.vbhtml?」 – user1477388 2012-08-07 17:50:38

+0

您可以明確指定:'result.ViewName =「〜/ Views/Shared/Error.vbhtml」'。 – 2012-08-07 17:51:15

+0

謝謝,解決了! – user1477388 2012-08-07 17:53:30