2013-02-19 87 views
1

在我開始之前,我確實發現了類似的問題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等基類顯示佈局是一個簡單的屬性,所以我不知道爲什麼設置它不會改變它的值。

回答

1

我可能失去了一些東西,但你有沒有嘗試過:

@{ Layout = SetLayout(); }

+0

是 - 與返回字符串的方法 - 但後來我失去了與_ViewStart佈局的默認值工作的能力。 CSHTML。我對.NET的解決方案不感興趣,因爲.NET不會讓我寫入cookie切割器屬性。如果它至少會拋出錯誤會很好。 – mld 2013-02-19 19:31:49

+0

從它的角度來看,沒有任何錯誤可以讓你意識到。您設置爲空的佈局與頁面的當前佈局無關。視圖代碼以這種方式與模型代碼隔離。通過調用SetLayout(),你可以設置一個完全不同於你自己認爲是的佈局屬性。 – DavidEdwards 2013-02-19 20:46:27

+0

我不確定你的意思,或者模型如何影響這個。我可以在這個類中沿着Layout屬性創建另一個屬性,並且它成爲視圖的一部分 - 即。 @ {SomeProperty = 1; }。這是我不理解的繼承問題嗎? – mld 2013-02-19 21:33:36