在我開始之前,我確實發現了類似的問題here,但我不認爲這是相同的問題。ASP.NET MVC 3 - 自定義WebViewPage無法設置佈局屬性
我已經創建了一個自定義WebViewPage<T>
並將其設置爲web.config中我的視圖的基頁。這工作正常。我在類中添加了類似以下的方法 -
public void SetLayout()
{
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["abc"]))
{
Layout = null;
}
}
在實際使用情況中還有一點,但這是基本方法。它從視圖中調用,並且應該在傳遞查詢字符串參數時覆蓋佈局。
@{ SetLayout(); }
我遇到的問題是佈局沒有設置爲空。當我瀏覽Visual Studio中的代碼時,我發現Layout設置爲"~/Views/Shared/_Layout.cshtml"
(從_ViewStart.cshtml
)。然後上面的代碼運行,它應該被設置爲null。檢查Layout屬性 - 緊接在該行之後 - 它仍然設置爲完整字符串。在即時窗口中,我可以覆蓋它爲空 - 並且工作 - 但通過代碼沒有效果。
我已經嘗試添加額外的佈局覆蓋類,使用base.Layout等基類顯示佈局是一個簡單的屬性,所以我不知道爲什麼設置它不會改變它的值。
是 - 與返回字符串的方法 - 但後來我失去了與_ViewStart佈局的默認值工作的能力。 CSHTML。我對.NET的解決方案不感興趣,因爲.NET不會讓我寫入cookie切割器屬性。如果它至少會拋出錯誤會很好。 – mld 2013-02-19 19:31:49
從它的角度來看,沒有任何錯誤可以讓你意識到。您設置爲空的佈局與頁面的當前佈局無關。視圖代碼以這種方式與模型代碼隔離。通過調用SetLayout(),你可以設置一個完全不同於你自己認爲是的佈局屬性。 – DavidEdwards 2013-02-19 20:46:27
我不確定你的意思,或者模型如何影響這個。我可以在這個類中沿着Layout屬性創建另一個屬性,並且它成爲視圖的一部分 - 即。 @ {SomeProperty = 1; }。這是我不理解的繼承問題嗎? – mld 2013-02-19 21:33:36