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