【问题标题】:Error "The view at '~/Views/Page/home.aspx' must derive from ViewPage, ViewPage<TViewData>, ViewUserControl, or ViewUserControl<TViewData>"错误“'~/Views/Page/home.aspx' 处的视图必须派生自 ViewPage、ViewPage<TViewData>、ViewUserControl 或 ViewUserControl<TViewData>”
【发布时间】:2011-01-28 21:30:29
【问题描述】:

我刚刚安装了 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。

【问题讨论】:

  • 您确定您显示的代码属于~/Views/Page/home.aspx吗?
  • 您通过提问解决了我的问题。谢谢。我看到你有 Inherits="System.Web.Mvc.ViewPage 并使用它,现在我可以在我的 MVC5 应用程序中使用 reportviewer!
  • 可能您只是忘记更改您在 CodeBehind-File 中继承的自动生成的基类,请参阅stackoverflow.com/a/47433765/3423823 - 至少这是我的问题,我偶然发现了多个问题不建议这样做

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


【解决方案1】:

检查参考中对 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 版本

【讨论】:

    【解决方案2】:

    我通过让我的自定义视图引擎直接继承 RazorViewEngine 为自己解决了这个问题。

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

    然后在 Global.asax 文件 Application_Start 事件中注册该视图引擎:

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

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

    【讨论】:

      【解决方案3】:

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

      最好在源代码控制下使用您的代码来执行此操作,这样您就可以看到所有的变化。它更新了我不想要的 javascript,所以我恢复了它,并且只保留了它对剃须刀的 web.config 所做的更改。

      请务必在 this blog post 上了解它的功能和不支持的功能。

      【讨论】:

        【解决方案4】:

        在解决方案级别执行batch-&gt;build-&gt;clean 或在项目级别执行清理通常会解决此问题,如果您已经完成了从项目中删除/替换不需要的System.Web.Mvc 版本的尽职调查引用和 *.config 文件...

        【讨论】:

          【解决方案5】:

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

          1. 将 MvcDiagnostics.aspx 复制到 Web 项目的根目录。
          2. 重现错误。
          3. 重现错误后,转到 /MvcDiagnostics.aspx 并查看它是否抱怨(将以粗体红色字体显示)关于正在加载的多个版本的框架。如果是这种情况,该工具应建议解决方案。

          完成后不要忘记从项目中删除 MvcDiagnostics.aspx。

          【讨论】:

          • +1:我遇到了同样的问题,在我的情况下确实加载了两个不同版本的 MVC2。然而,我不知道诊断的事情。很高兴知道。
          • 是的,这就是问题所在,我最终只需要在 Web 项目上将 MVC dll 标记为本地副本即可解决问题,谢谢!
          • 谢谢。它帮助我将解决方案从 MVC 1.0 迁移到 MVC 4.0
          • @Levi System.Web.Mvc 是 5.2.40 版本,但问题仍然存在。
          • @Levi 我将 MVC 从 5.2.4 升级到 5.2.7 版本.....没有问题
          【解决方案6】:

          我在将 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。

          【讨论】:

            猜你喜欢
            • 2016-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-28
            • 2013-09-06
            • 1970-01-01
            相关资源
            最近更新 更多