通常、ItemDataboundでListViewの要素にアクセスしようとすると、e.Item.FindControl( "myControl")と言うのと同じくらい簡単ですが、ajaxtoolkitのアコーディオンを使用するとうまくいかないようです。
マークアップは次のとおりです。
<ajaxToolkit:Accordion runat="server" ID="accOuterAccordion" OnItemDataBound="accOuterAccordion_ItemDataBound">
<HeaderTemplate>
<asp:Label runat="server" Text='<%#Eval("Header") %>'/>
</HeaderTemplate>
<ContentTemplate>
<asp:ListView runat="server" ID="lvReviewers" ItemPlaceholderID="phReviewer">
<LayoutTemplate>
<ul>
<asp:PlaceHolder runat="server" ID="phReviewer"/>
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:Label runat="server" ID="lblReviewer" Text='<%#Eval("Assignee.Name") %>'/>
</li>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</ajaxToolkit:Accordion>
OnItemDataBoundイベントのコードビハインドは次のとおりです。
protected void accOuterAccordion_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e)
{
var item = e.AccordionItem.DataItem as MocRequest;
var innerList = e.AccordionItem.FindControl("lvReviewers") as ListView;
innerList.DataSource = MocApi.GetReviews(item.MocRequestID);
innerList.DataBind();
}
コードをステップスルーすると、アイテムはロードされたアイテムを正しく取得しています。ただし、innerListはnullとして返されます。何か案は?