我试图让我的所有视图继承自定义类,以便我可以向所有页面添加某些行为和值,但我遇到了一些问题.我尝试了继承System.Web.Mvc.WebViewPage的子类,但是我被迫实现了一个我不知道应该做什么的Execute过程.此外,如果我尝试访问Context变量,我得到一个空引用(真的很奇怪).这让我觉得我可能有错误的基类......
有什么想法吗?
迭代,System.Web.Mvc.WebViewPage
是正确的基类型(System.Web.Mvc.WebViewPage
如果你想要强类型视图,你应该有另一个继承的类).您应该将自己的类标记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方法,并执行您的视图.