Bra*_*bby 9 asp.net generics objectdatasource
我有一个通用的Repository <T>类,我想与ObjectDataSource一起使用.存储库<T>位于名为DataAccess的单独项目中.根据MS新闻组的这篇文章(相关部分复制如下):
在内部,ObjectDataSource正在调用Type.GetType(string)来获取类型,因此我们需要遵循Type.GetType中记录的指南,了解如何使用泛型获取类型.您可以在Type.GetType上引用MSDN Library:
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()也会返回有效类型.什么给出了什么?
Dar*_*opp 13
做这样的事情.
Type type = typeof(Repository<MessageCategory);
string assemblyQualifiedName = type.AssemblyQualifiedName;
获取assemblyQualifiedName的值并将其粘贴到TypeName字段中.注意Type.GetType(string),传入的值必须是
要获取的类型的程序集限定名称.请参阅AssemblyQualifiedName.如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则提供由其名称空间限定的类型名称就足够了.
因此,它可以通过在代码中传入该字符串来工作,因为该类位于当前正在执行的程序集中(您在其中调用它),而ObjectDataSource则不是.
很可能你正在寻找的类型是
MyProject.Repository`1[MyProject.MessageCategory, DataAccess, Version=1.0.0.0, Culture=neutral, PublicKey=null], DataAccess, Version=1.0.0.0, Culture=neutral, PublicKey=null
| 归档时间: | 
 | 
| 查看次数: | 5267 次 | 
| 最近记录: |