我有一个通用的 Repository 类,我想与 ObjectDataSource 一起使用。 Repository 位于一个名为 DataAccess 的单独项目中。根据这篇文章来自 MS 新闻组(相关部分复制如下):
在内部,ObjectDataSource 正在调用 Type.GetType(string) 来获取
类型,因此我们需要遵循 Type.GetType 中记录的有关如何操作的指南
使用泛型获取类型。你可以参考MSDN Library上关于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() 也会返回有效类型。那么什么给出呢?
做这样的事情。
Type type = typeof(Repository<MessageCategory);
string assemblyQualifiedName = type.AssemblyQualifiedName;
获取 assemblyQualifiedName 的值并将其粘贴到 TypeName 字段中。注意Type.GetType(string),传入的值必须是
要获取的类型的程序集限定名称。看装配合格名称。如果该类型位于当前执行的程序集或 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)