ASP .NET嵌套ListView无法识别

时间:2012-10-29 11:55:09

标签: c# asp.net .net

我有以下示例代码,它使用嵌套的ListView:

<asp:ListView ID="list" runat="server" ItemPlaceholderID="placeHolder"
        OnItemDataBound="listItemDataBound">
    <ItemTemplate>
        <p><%#Eval("name") %></p>
        <asp:ListView ID="sublist" runat="server" ItemPlaceholderID="subPlaceHolder">
            <ItemTemplate><%#Eval("subName") %></ItemTemplate>
            <LayoutTemplate>
                <asp:PlaceHolder ID="subPlaceHolder" runat="server"></asp:PlaceHolder>
            </LayoutTemplate>
        </asp:ListView>
    </ItemTemplate>
    <LayoutTemplate>
        <asp:PlaceHolder ID="placeHolder" runat="server"></asp:PlaceHolder>
    </LayoutTemplate>
</asp:ListView>

但嵌套的ListView(子列表)在我的脚本代码中不被识别为变量,因此我无法访问它并提供一些数据绑定。当我在主ListView(例如DataSource)中添加一些其他对象时,它也无法识别。 如何访问嵌套的ListView?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:2)

ItemTemplate中的控件将多次创建,一次针对数据源中的每个项目,因此编译器无法生成单个字段来表示它们。您需要使用FindControl代替:

protected void listItemDataBound(object sender, ListViewItemEventArgs e)
{
   var sublist = (ListView)e.Item.FindControl("sublist");
   ...
}

答案 1 :(得分:0)

OnItemDataBound事件代码中,您必须执行此操作:

 if (e.Item.ItemType == ListViewItemType.DataItem)
 {
    ListView sublist = (ListView)e.Item.FindControl("sublist");
 }

为了找到嵌套的ListView