I've just installed MVC2 and I've got a view that looks like this
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Home.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Home</h2>
</asp:Content>
And the controller is just returning the view. But when I run the page I get this error:
System.InvalidOperationException: The view at '~/Views/Page/home.aspx' must derive from ViewPage, ViewPage, ViewUserControl, or ViewUserControl.
I was getting this error upgrading my MVC 1.0 project to MVC 2.0. If you are doing this have a look at http://weblogs.asp.net/leftslipper/archive/2010/03/10/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2-rtm.aspx
Double check your web.config against a new MVC 2.0 project.
You might unintentionally have two versions of the MVC framework loaded into the same application. To confirm, download MVC 2 Futures from http://aspnet.codeplex.com/releases/view/41742. There is a file MvcDiagnostics.aspx in this ZIP file.
Don't forget to delete MvcDiagnostics.aspx from your project when you are done.
Check the reference to System.Web.Mvc.dll file in your reference. Make sure its pointing to C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
If its pointing to the one under ASP.NET MVC 4 directory then open your project file in a notepad. Look for
This should be changed to
This will help to point to the specific MVC version
Doing either a
batch->build->clea
n at the solution level OR a clean at the project level usually takes care of this if you have already done the due diligence of removing/replacing the undesired version(s) ofSystem.Web.Mvc
from project references and *.config files...You could try using the ASP.NET MVC 3 Application Upgrader
Best to do this with your code under source control, that way you can eye-ball everything that is changes. It updates your javascript which I didn't want so I reverted that, and only kept the changes it makes to the web.config for razor.
Be sure to read about what it does and what it doesn't support on this blog post.
I solved this problem for myself by having my custom view engine inherit RazorViewEngine directly.
And then registering that viewengine in the Global.asax file Application_Start event:
Clearly this assumes that you are using Razor.