ObjectDataSource で使用したい汎用の Repository<T> クラスがあります。Repository<T> は、DataAccess という別のプロジェクトにあります。MS ニュースグループのこの投稿によると(関連部分を以下にコピー):
内部的に、ObjectDataSource は Type.GetType(string) を呼び出して型を取得しているため、ジェネリックを使用して型を取得する方法については、Type.GetType に記載されているガイドラインに従う必要があります。Type.GetType で MSDN ライブラリを参照できます。
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() に渡すと、有効な型も返されます。それで、何が得られますか?