2008-09-07 108 views
5

不完全确定这里发生了什么;任何帮助,将不胜感激。.NET MVC暧昧类型参考

我正在尝试创建一个新的.NET MVC Web应用程序。我很确定我有它设置正确,但我发现了以下错误:

The type 'System.Web.Mvc.ViewPage' is ambiguous: it could come from assembly 
'C:\MyProject\bin\System.Web.Mvc.DLL' or from assembly 
'C:\MyProject\bin\MyProject.DLL'. Please specify the assembly explicitly in the type name. 

它报告的误差源如下:

Line 1: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 
Line 2: 
Line 3: <asp:Content ID="indexContent" ContentPlaceHolderID="MainContentPlaceHolder" runat="server"> 

任何站出来的是我完全错了吗?

回答

1

此错误通常表示类命名冲突。您正在引用两个名称空间,或者您在使用的另一个名称空间中创建了一个具有相同名称的类。我会先看看可能是什么。

1
Inherits="System.Web.Mvc.ViewPage" 

我想象这应该指向你的View codebehind文件类,而不是在基本的ViewPage类。

2

您是否使用了CodeBehind文件,我没有看到CodeBehind =“”属性,您指定的是继承自?然后,您必须指向继承到代码隐藏的类名称。

例子:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication4.Views.Home.Index" %> 

确保继承是完全合格的。它应该是名称空间,后跟类名称。

3

我想你把你的一个页面命名为“ViewPage”就是这样吗?

而像@Jonathan提到的,这种气味:

Inherits="System.Web.Mvc.ViewPage" 

在我的MVC应用程序,所有视图页面有这个代替:

Inherits="MySite.Views.Pages.Home" 

或沿行的东西。你的aspx页面标记应该有“Inherits”指向你的代码隐藏类名,而不是它继承的实际类。属性名称相当具有误导性,但它是早期的人造物品。

2

我正在运行ASP.NET MVC Beta,并且也遇到了这个错误。

它出现时,我试图删除文件后面的代码为视图。我删除了@Page指令中的“CodeBehind”属性,并将“Inherits”属性更改为指向System.Web.Mvc.ViewPage,但在项目中保留了实际的aspx.cs代码。

在这一点上,如果我试图运行我的项目,我得到了你提到的错误。

我解决了这个错误,从我的项目中删除了视图的aspx.cs(代码隐藏)文件。

1

在Reflector中打开C:\ MyProject \ bin \ MyProject.DLL并查找ViewPage,看看您是否意外定义了一个。

2

检查您的程序集引用System.Web.Mvcweb.config

雷人明确指定2.0.0.0,但我的项目中引用3.0.0.0

+0

我得到了同样的错误时升级的项目从MVC 2 MVC 5.必须同时在web.config文件中,以取代System.Web.Mvc版本(在〜/和〜/查看/)。 – 2014-01-14 00:59:13

0

这个星期我有完全相同的错误。

我的Webform.aspx文件有一个生成的designer.cs文件。在这个文件中,这个类实际上被命名为“ViewPage”。删除设计器文件,或将类内容移到webform.aspx.cs文件中,我的错误消失了。

只是把它放在那里以防万一有人有这个错误。