代码之家  ›  专栏  ›  技术社区  ›  Glenn Slaven

错误“位于“~/views/page/home.aspx”的视图必须派生自view page、view page<tviewdata>、viewusercontrol或viewusercontrol<tviewdata>”

  •  15
  • Glenn Slaven  · 技术社区  · 14 年前

    我刚安装了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”的视图必须从view page、view page、viewusercontrol或viewusercontrol派生。

    6 回复  |  直到 7 年前
        1
  •  20
  •   Levi    14 年前

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

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

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

        2
  •  2
  •   David    14 年前

    我的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。

        3
  •  1
  •   akjoshi HCP    11 年前

    要么做一个 batch->build->clea n在解决方案级别或项目级别的“清理”通常会处理此问题,如果您已经完成了删除/替换不需要的版本 System.Web.Mvc 从项目引用和*.config文件…

        4
  •  0
  •   superlogical    11 年前

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

    最好在源代码控制下对代码执行此操作,这样您就可以洞察所有更改。它更新了我不想要的javascript,所以我恢复了它,只保留了它对Razor的web.config所做的更改。

    一定要了解它的功能和不支持的功能 this blog post .

        5
  •  0
  •   BlackjacketMack    11 年前

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

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

    然后在global.asax文件应用程序启动事件中注册该viewengine:

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

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

        6
  •  0
  •   sree    10 年前

    检查引用中对system.web.mvc.dll文件的引用。确保其指向C:\Program Files(x86)\Microsoft ASP.NET\ASP.NET MVC 3\assembles\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版本