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