如何访问父控件内部的控件?(asp.net c#)

本文关键字:控件 net asp 何访问 访问 内部 | 更新日期: 2023-09-27 18:25:29

我有一个带有listview的页面。listview中有标签和下拉列表。我想从ddlTags_Init()方法访问标签的文本。代码:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource1" 
        DataKeyNames="id_Image" onitemdatabound="ListView1_ItemDataBound">
        <ItemTemplate>
             <asp:Label ID="TagsLabel" runat="server" Text='<%# Eval("Tags") %>' />
             <asp:DropDownList ID="ddlTags" runat="server" OnInit="ddlTags_Init" >
             </asp:DropDownList>
        </ItemTemplate>
</asp:ListView>

代码背后:

protected void ddlTags_Init(object sender, EventArgs e)
{
       DropDownList ddlTags = (DropDownList)sender;
       Label lblTag = (Label)ddlTags.Parent.FindControl("TagsLabel");
       string text=lblTag.Text;
}

目前我被卡住了

Label lblTag = (Label)ddlTags.Parent.FindControl("TagsLabel");

有人知道我错过了什么吗?谢谢,Jim

如何访问父控件内部的控件?(asp.net c#)

假设listview数据源中有1个以上的元素,为什么不将代码放入ItemDataBound处理程序中?我认为它应该起作用。

Init获取Label的绑定值为时过早。换句话说,标签值还没有绑定。

相反,您可能需要考虑使用ItemDataBound方法。

<asp:ListView ID="ListView1" runat="server" 
     OnItemDataBound="ListView1_ItemDataBound" ...>
  ....
</asp:ListView>
protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        var ddlTags = e.Item.FindControl("ddlTags") as DropDownList;
        var tagsLabel = e.Item.FindControl("TagsLabel") as Label;
    }
}