以下の aspx コードのこの ListView は、別の ListView にネストされています。以下のコード ビハインドは、ネストされたものをラップする ListView 用です。繰り返しのたびに、ラッパー ListView が入れ子になった ListView のデータソースにプロパティ "Comments" を渡すようにします。イベント "ItemDataBound" (このイベントはラッパー ListView 用です) を使用してコード ビハインドでこれを実行しようとしましたが、コードを実行すると、次の例外が発生します: DataBinding: 'System.Collections.Generic.HashSet`1[ [BlogProfile.Data.Comment, BlogProfile.Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' には、'Author' という名前のプロパティが含まれていません。私が望むのは、ラッパー ListView がネストされた ListView に異なるデータソースを渡すたびに、このネストされた ListView が aspx コードで書いたように「Eval(...)」でこのデータソースを取得することだけです。ここが恋しい。ここで正しいイベントを使用していないことが問題なのではないでしょうか?
aspx コード:
<asp:ListView ID="CommentListView" runat="server" >
<ItemTemplate>
<div class="postComments">
<span class="authorComment"><%# Eval("Author") %></span>
:
<span class="commentContent"><%# Eval("Message") %></span>
</div>
</ItemTemplate>
</asp:ListView>
コードビハインド:
protected void PostsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
BlogProfileEntities blogProfile = new BlogProfileEntities();
var listview = e.Item.FindControl("CommentListView") as ListView;
var hiddenfield = e.Item.FindControl("CurrentPostIDHiddenField") as HiddenField;
int id = int.Parse(hiddenfield.Value);
listview.DataSource = (from p in blogProfile.Posts
where p.PostID == id
select p.Comments).ToList();
listview.DataBind();
}