18

我试图让我的所有视图都从自定义类继承,以便我可以向所有页面添加某些行为和值,但我遇到了一些问题。我尝试继承 System.Web.Mvc.WebViewPage 但我被迫实现一个我不知道它应该做什么的 Execute 过程。此外,如果我尝试访问 Context 变量,我会得到一个空引用(真的很奇怪)。这使我认为我可能有错误的基类....

有什么想法吗?

4

1 回答 1

31

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 方法并且你的视图被执行。

于 2010-10-19T01:19:24.173 回答