无法加载类型 - 自定义ViewPage类似的基类

3

我正在创建一个新的基类,用于在asp.net应用程序中创建自己版本的强类型视图,但该应用程序本身并不是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指令的示例:

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

在上述指令中,MyApp.Content.Search类实现了BasePage需要满足的泛型类型约束的IPageInfo接口。
一切编译都很好,但是当我浏览该页面时,出现了“无法加载类型”的错误。我打开了MVC 2程序集,查看了ViewPage的执行方式,它似乎具有相同的基本结构。我在网上搜索了一下,对于这种MVC错误的一般建议是删除并重新添加对MVC的引用。如果我正在使用MVC,那就太好了;然而,我的BasePage类和Search类都在同一个程序集中。我一直在使用完全限定名称(如所示)。
有没有人有任何想法,可以尝试解决这个问题?
谢谢。
1个回答

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>

PageParserFilter让我朝着正确的方向前进。感谢您提供的信息。 - JamesEggers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接