我刚刚安装了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派生。
答案 0 :(得分:20)
您可能无意中将两个版本的MVC框架加载到同一个应用程序中。要确认,请从http://aspnet.codeplex.com/releases/view/41742下载MVC 2期货。此ZIP文件中有一个 MvcDiagnostics.aspx 文件。
完成后,不要忘记从项目中删除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版本