错误“'〜/ Views / Page / home.aspx'中的视图必须派生自ViewPage,ViewPage <tviewdata>,ViewUserControl或ViewUserControl <tviewdata>”</tviewdata> </tviewdata>

时间:2010-03-18 06:03:24

标签: asp.net-mvc asp.net-mvc-2 views

我刚刚安装了MVC2,我有一个看起来像这样的视图

<%@ 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>

控制器正在返回视图。但是当我运行页面时,我收到了这个错误:

  

System.InvalidOperationException:'〜/ Views / Page / home.aspx'中的视图必须从ViewPage,ViewPage,ViewUserControl或ViewUserControl派生。

6 个答案:

答案 0 :(得分:20)

您可能无意中将两个版本的MVC框架加载到同一个应用程序中。要确认,请从http://aspnet.codeplex.com/releases/view/41742下载MVC 2期货。此ZIP文件中有一个 MvcDiagnostics.aspx 文件。

  1. 将MvcDiagnostics.aspx复制到您的网站项目的根目录。
  2. 重现错误。
  3. 重现错误后,转到/MvcDiagnostics.aspx,查看是否有关于正在加载的框架的多个版本的抱怨(将以粗体红色字体表示)。如果是这种情况,该工具应提出解决方案。
  4. 完成后,不要忘记从项目中删除MvcDiagnostics.aspx。

答案 1 :(得分:2)

我在将MVC 1.0项目升级到MVC 2.0时遇到此错误。如果您这样做,请查看http://weblogs.asp.net/leftslipper/archive/2010/03/10/migrating-asp-net-mvc-1-0-applications-to-asp-net-mvc-2-rtm.aspx

针对新的MVC 2.0项目仔细检查您的web.config。

答案 2 :(得分:1)

如果您已经完成了删除/替换{{1的不需要的版本来自项目引用和* .config文件......

答案 3 :(得分:0)

您可以尝试使用ASP.NET MVC 3 Application Upgrader

最好在源代码管理下使用您的代码执行此操作,这样您就可以关注所有变化的内容。它更新了我不想要的javascript,所以我还原了它,并且只保留了对razor的web.config所做的更改。

请务必阅读this blog post上的内容及其不支持的内容。

答案 4 :(得分:0)

我通过自定义视图引擎直接继承RazorViewEngine来解决这个问题。

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

然后在Global.asax文件Application_Start事件中注册该viewengine:

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

显然,这假设您使用的是Razor。

答案 5 :(得分:0)

检查引用中对System.Web.Mvc.dll文件的引用。确保它指向C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

如果它指向ASP.NET MVC 4目录下的那个,那么在记事本中打开你的项目文件。寻找

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

这应该改为

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

这将有助于指向特定的MVC版本