我有一个要与 ObjectDataSource 一起使用的通用 Repository<T> 类。Repository<T> 位于一个名为 DataAccess 的单独项目中。根据MS 新闻组的这篇文章(相关部分复制如下):
在内部,ObjectDataSource 调用 Type.GetType(string) 来获取类型,因此我们需要遵循 Type.GetType 中记录的关于如何使用泛型获取类型的指南。您可以参考 MSDN Library on Type.GetType:
http://msdn2.microsoft.com/en-us/library/w3f99sx1.aspx
从文档中,您将了解到您需要使用反引号 (`) 来表示使用泛型的类型名称。
此外,这里我们必须在类型名称字符串中指定程序集名称。
因此,对于您的问题,答案是使用如下类型名称:
TypeName="TestObjectDataSourceAssembly.MyDataHandler`1[System.String],TestObjectDataSourceAssembly"
好吧,有道理。但是,当我尝试它时,页面会引发异常:
<asp:ObjectDataSource ID="MyDataSource" TypeName="MyProject.Repository`1[MyProject.MessageCategory],DataAccess" />
[InvalidOperationException:找不到 ObjectDataSource 'MyDataSource' 的 TypeName 属性中指定的类型。]
奇怪的是,这只发生在我查看页面时。当我从 VS2008 设计器打开“配置数据源”对话框时,它正确地向我显示了我的通用存储库类的方法。在调试时将 TypeName 字符串传递给 Type.GetType() 也会返回有效类型。那么给了什么?