Error “The view at '~/Views/Page/home.aspx'

2019-01-14 12:36发布

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.

6条回答
孤傲高冷的网名
2楼-- · 2019-01-14 12:59

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.

查看更多
SAY GOODBYE
3楼-- · 2019-01-14 13:14

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.

  1. Copy MvcDiagnostics.aspx to the root of your web project.
  2. Reproduce the error.
  3. After reproducing the error, go to /MvcDiagnostics.aspx and see if it complains (will be in bold red lettering) about multiple versions of the framework being loaded. The tool should suggest a resolution if this is the case.

Don't forget to delete MvcDiagnostics.aspx from your project when you are done.

查看更多
戒情不戒烟
4楼-- · 2019-01-14 13:14

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

<Reference Include="System.Web.Mvc">
  <Private>False</Private>
</Reference>

This should be changed to

<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35, processorArchitecture=MSIL" />

This will help to point to the specific MVC version

查看更多
ゆ 、 Hurt°
5楼-- · 2019-01-14 13:16

Doing either a batch->build->clean 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) of System.Web.Mvc from project references and *.config files...

查看更多
甜甜的少女心
6楼-- · 2019-01-14 13:16

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.

查看更多
欢心
7楼-- · 2019-01-14 13:19

I solved this problem for myself by having my custom view engine inherit RazorViewEngine directly.

public class MainViewEngine : RazorViewEngine
{
    public MainViewEngine()
    {...
}}

And then registering that viewengine in the Global.asax file Application_Start event:

ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new MainViewEngine());

Clearly this assumes that you are using Razor.

查看更多
登录 后发表回答