What’s the base class of a Razor View in ASP.NET MVC3

I’m trying to have all my views inherit from a custom class so that I can add certain behaviour and values to all pages, but I’m having some issues. I tried subclassing System.Web.Mvc.WebViewPage but I’m forced to implement an Execute procedure that I don’t know what it should do. Also, if I try to access the Context variable, I get a null reference (really weird). This leads me to think that I may have the wrong base class….

Any thoughts?


Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Diego, System.Web.Mvc.WebViewPage is the right base type (and you should have another class inheriting from System.Web.Mvc.WebViewPage<TModel> if you want strongly-typed views). You should mark your own class as abstract so that you are not forced to implement the Execute method.

Update: To configure all your views to use your custom base class, look into the ~ViewsWeb.config file. Inside of it there’s a Razor-specific section where you can use the pageBaseType attribute to configure your custom type.

As far as the Context property is concerned, it should be fully initialized once the view is executing. However, it might not be available if you try to access it too early (for example, from your classes constructor). When are you trying to access it?

The Execute method is something that is provided by the Razor compiler when your view is compiled. For example, given the following view file

Hello @Name!

The Razor compiler will behind the scenes generate the following class (this is a simplification, so the details might be off, but it should convey the point)
public class _Some_Generated_Class_Name_ : System.Web.Mvc.WebViewPage {
  public void Execute() {
    Write("Hello ");

Then the framework calls the Execute method on your view class and your view gets executed.

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Notify of

Inline Feedbacks
View all comments
Would love your thoughts, please comment.x