2011-12-18 21 views
2

我在_ViewStart.cshtml中爲我的大部分網站使用共享佈局文件。沿線的東西:我可以防止用於錯誤消息的共享佈局嗎?

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

在我的大部分網站和錯誤報告頁面之間幾乎沒有信息共享。我如何區分這兩種情況?

我想爲所有頁面加載共享佈局,除了任何錯誤報告。

回答

2

你可以在每頁/視圖基礎

@{ 
    var model = ViewContext.Controller.ViewData.Model; 
    if (model is System.Web.Mvc.HandleErrorInfo) { 
    Layout = ""; 
    } else { 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 
} 

這是從我的Post.vbhtml頁面更改佈局 - 我只需要改變佈局頁面使用不同的佈局。

+0

我剛試過 - 我改變了佈局指令在我的post.vbhtml頁面的頂部,它使用了不同的佈局頁面。 – 2011-12-18 22:08:22

+0

該選項提供了*看起來正確,但*表現不正確的解決方案。我特別要求避免加載共享視圖。在某些時候不顯示它作爲最終結果可能會有用,但是對於我的用例而言,微妙(並且非常重要)的方式失敗了。 – blueberryfields 2011-12-18 22:28:01

1

完成後,此問題有一個流行,有時不正確的解決方案提供下面。謹慎選擇,如果不確定,請使用已接受的答案


微妙有時重要差異接受的答案及以下的流行的選擇之間。下面的替代方案導致的結果看起來是正確的大部分時間,但並不總是工作。這似乎是由於加載順序和視圖文件的執行所致 - 最頂端的共享視圖首先被加載並執行。如果第一次加載+執行進程有副作用,該解決方案將以奇怪和重要的方式破解。

_ ViewStart.cshtml

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

指導適當的視圖不使用佈局,通過加入以下的視圖文件的頂部:

ErrorView.cshtml

@{ 
    Layout = ""; 
} 
相關問題