我正在尝试将所有视图都从自定义类继承,以便我可以向所有页面添加某些行为和值,但我遇到了一些问题。我尝试了继承System.Web.Mvc.WebViewPage的子类,但是我被迫实现了一个我不知道应该做什么的Execute过程。此外,如果我尝试访问Context变量,我得到一个空引用(真的很奇怪)。这让我觉得我可能有错误的基类......
有什么想法吗?
答案 0 :(得分:30)
Diego,System.Web.Mvc.WebViewPage
是正确的基类型(如果你想要强类型的视图,你应该有另一个继承自System.Web.Mvc.WebViewPage<TModel>
的类)。您应该将自己的类标记为abstract
,这样就不会强制您实现Execute方法。
更新:要配置所有视图以使用自定义基类,请查看~\Views\Web.config
文件。在其中有一个特定于Razor的部分,您可以使用pageBaseType
属性来配置自定义类型。
就Context属性而言,一旦执行视图就应该完全初始化它。但是,如果您尝试过早访问它(例如,从类构造函数中),它可能不可用。你什么时候试图访问它?
在编译视图时,Razor编译器会提供Execute方法。例如,给定以下视图文件
Hello @Name!
Razor编译器将在幕后生成以下类(这是一个简化,所以细节可能会关闭,但它应该传达点)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
public void Execute() {
Write("Hello ");
Write(Name);
Write("!");
}
}
然后框架在您的视图类上调用Execute方法,并且您的视图将被执行。