我試圖讓我的所有視圖繼承自一個自定義類,以便我可以添加某些行爲和值到所有頁面,但我有一些問題。我試過子類System.Web.Mvc.WebViewPage,但我不得不執行一個執行過程,我不知道它應該做什麼。此外,如果我嘗試訪問Context變量,我會得到一個空引用(真的很奇怪)。這導致我認爲我可能有錯誤的基類......什麼是在ASP.NET MVC3 Razor視圖的基類
有什麼想法?
我試圖讓我的所有視圖繼承自一個自定義類,以便我可以添加某些行爲和值到所有頁面,但我有一些問題。我試過子類System.Web.Mvc.WebViewPage,但我不得不執行一個執行過程,我不知道它應該做什麼。此外,如果我嘗試訪問Context變量,我會得到一個空引用(真的很奇怪)。這導致我認爲我可能有錯誤的基類......什麼是在ASP.NET MVC3 Razor視圖的基類
有什麼想法?
Diego,System.Web.Mvc.WebViewPage
是正確的基本類型(如果需要強類型視圖,您應該有另一個類繼承System.Web.Mvc.WebViewPage<TModel>
)。您應該將自己的班級標記爲abstract
,以便您不必強制實施Execute方法。
更新:要配置所有視圖以使用自定義基類,請查看~\Views\Web.config
文件。裏面有一個Razor特定的部分,您可以使用pageBaseType
屬性來配置您的自定義類型。
就Context屬性而言,視圖執行後應該完全初始化它。但是,如果您嘗試訪問它太早(例如,從您的類構造函數),它可能無法使用。你什麼時候試圖訪問它?
Execute方法是Razor編譯器在編譯視圖時提供的。例如,給出下面的視圖文件
Hello @Name!
剃刀編譯器會在幕後生成以下類(這是一種簡化,所以細節可能會關閉,但它應該傳達出點)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
然後,框架調用視圖類的Execute方法,並執行視圖。
您可以通過擴展方法將行爲添加到所有類中,還是需要它們作爲實例方法? – R0MANARMY 2010-10-18 22:18:11
主要我需要添加一些可以從視圖中引用的變量。我知道我可以使用擴展方法來實現這一點,但應該有一種像aspx視圖引擎一樣的自定義viewpage類的方法。 – Diego 2010-10-18 22:23:10