无法加载类型 - 自定义视图页面类基类

时间:2010-07-12 13:07:14

标签: c# asp.net generics

我正在为asp.net应用程序创建一个新的基类,以便从MVC创建我自己的强类型视图版本。应用程序本身不是MVC应用程序。以下是我的自定义类的基础。

public class BasePage<T> : Page where T : IPageInfo
{
    public BasePage()
    {
        this.MyPageInfo = IoC.GetInstance<IPageInfo>(); //pseudo-code to populate a property.
    }
}

当我向我的应用程序添加一个新的WebForm页面时,我将Page指令的“inherits”属性更改为指向此BasePage类而不是典型的代码隐藏类,其方式与ASP.Net MVC强类型相同观点。以下是页面指令的示例。

<%@ Page language="C#" inherits="MyApp.Core.BasePage<MyApp.Content.Search>"%>

在上面的指令中,MyApp.Content.Search类实现了BasePage需要满足泛型类型约束的IPageInfo接口。

所有内容编译都很好,但当我浏览页面时,我收到错误Could Not Load Type。我破解了MVC 2程序集以查看ViewPage是如何完成的,它看起来是相同的基本结构。我环顾网络,MVC的这个错误的一般建议是删除并读取对MVC的引用。如果我使用MVC,这将是很好的;但是我的BasePage类和我的Search类都在同一个程序集中。我一直在使用完全限定名称(如图所示)。

任何人都知道我可以尝试让它发挥作用吗?

由于

1 个答案:

答案 0 :(得分:4)

ASP.NET MVC引入了将<%@ Page language="C#" inherits="MyApp.Core.BasePage<MyApp.Content.Search>"%>映射到MyApp.Core.BasePage的魔力。 您可以检查System.Web.Mvc.ViewTypeParserFilter:

的实现
<pages
    validateRequest="false"
    pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <controls>
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
    </controls>
</pages>