我有一个通用的存储库<T>我想与ObjectDataSource一起使用的类。存储库<T>位于名为DataAccess的单独项目中。据this post from the MS newsgroups(以下复制相关部分):在ObjectDataSource中使用泛型类
内部,ObjectDataSource控件在调用Type.GetType(字符串),以获得 类型,所以我们需要遵循怎样 在Type.GetType记录的方针使用泛型获取类型。您可以参考MSDN库上Type.GetType:
http://msdn2.microsoft.com/en-us/library/w3f99sx1.aspx
从文件,你会知道你需要使用反引号(`)来 表示这是使用泛型类型名称。
另外,这里我们必须在类型名称字符串中指定程序集名称。
因此,对于您的问题,答案是使用类型名称,比如如下:
类型名= “TestObjectDataSourceAssembly.MyDataHandler`1 [System.String],TestObjectDataSourceAssembly”
好,有道理。当我尝试它,但是,该页面会抛出异常:
<asp:ObjectDataSource ID="MyDataSource" TypeName="MyProject.Repository`1[MyProject.MessageCategory],DataAccess" />
[出现InvalidOperationException:在ObjectDataSource控件 'MyDataSource' 的TypeName属性指定的类型找不到]
的好奇的是,这只发生在我浏览页面时。当我从VS2008设计器打开“配置数据源”对话框时,它正确地显示了我的通用Repository类中的方法。调试时将TypeName字符串传递给Type.GetType()也会返回有效类型。那么是什么给了?
<%Response.Write(typeof(YourClassName).AssemblyQualifiedName); %> – 2012-08-23 09:20:34