什么';s是ASP.NET MVC3中Razor视图的基类

什么';s是ASP.NET MVC3中Razor视图的基类,asp.net,razor,asp.net-mvc-3,Asp.net,Razor,Asp.net Mvc 3,我试图让我的所有视图继承自一个自定义类,这样我就可以向所有页面添加某些行为和值,但我遇到了一些问题。我尝试将System.Web.Mvc.WebViewPage子类化,但我被迫实现了一个执行过程,我不知道它应该做什么。另外,如果我试图访问上下文变量,我会得到一个空引用(真奇怪)。这让我想到我可能有错误的基类 有什么想法吗?Diego,System.Web.Mvc.WebViewPage是正确的基本类型(如果您想要强类型视图,您应该有另一个继承自System.Web.Mvc.WebViewPage

我试图让我的所有视图继承自一个自定义类,这样我就可以向所有页面添加某些行为和值,但我遇到了一些问题。我尝试将System.Web.Mvc.WebViewPage子类化,但我被迫实现了一个执行过程,我不知道它应该做什么。另外,如果我试图访问上下文变量,我会得到一个空引用(真奇怪)。这让我想到我可能有错误的基类


有什么想法吗?

Diego,
System.Web.Mvc.WebViewPage
是正确的基本类型(如果您想要强类型视图,您应该有另一个继承自
System.Web.Mvc.WebViewPage
的类)。您应该将自己的类标记为
abstract
,这样您就不会被迫实现Execute方法

更新:要将所有视图配置为使用自定义基类,请查看
~\views\Web.config
文件。其中有一个特定于Razor的部分,您可以使用
pageBaseType
属性来配置自定义类型

就上下文属性而言,应该在视图执行后对其进行完全初始化。但是,如果您试图过早地访问它(例如,从类构造函数访问),它可能不可用。您何时尝试访问它


Execute方法是Razor编译器在编译视图时提供的。例如,给定以下视图文件

Hello @Name!
Razor编译器将在幕后生成以下类(这是一个简化,因此细节可能不完整,但它应该传达要点)


然后框架调用视图类上的Execute方法,视图被执行。

您可以通过扩展方法向所有类添加行为,还是需要将它们作为实例方法?主要是我需要添加一些可以从视图中引用的变量。我知道我可以使用扩展方法来实现这一点,但是应该有一种方法可以像使用aspx视图引擎一样拥有自定义的viewpage类。在我的类的构造函数中:)那一定是这样。作为问题的补充,Execute过程应该做什么?如果我只是用一个空白过程覆盖它,可以吗?@Diego我编辑了我的答案,以说明编译器如何生成执行的实现。有没有办法为目录中的所有视图指定基类?我希望普通视图继承我的特定System.Web.Mvc.WebViewPage子类,以及指定要从我的特定System.Web.Mvc.WebViewPage子类继承的模型的视图。@Diego我添加了一个更新,描述了在何处配置基类。
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
  public void Execute() {
    Write("Hello ");
    Write(Name);
    Write("!");
  }
}