如何在自动回发后检索中继器中的同级/邻居控件

本文关键字:控件 邻居 中继器 检索 | 更新日期: 2024-10-25 10:48:57

我有一个下拉列表,其中包含 SelectedIndexChanged 事件和autopostback = true 。在此下拉列表右侧的aspx中,我有一个标签。但这些都在中继器内。因此,当 SelectedIndexChanged 触发时,如果事件的范围来自 DDL 而不是转发器,我如何在服务器端捕获标签对象。

阿斯普克斯

<asp:Repeater ID="repeater1" runat="server" 
   OnItemDataBound="repeater1_ItemDataBound" 
   OnItemCommand="repeater1_ItemCommand">
   <ItemTemplate>
      <asp:DropDownList ID="ddl1" runat="server" 
         OnSelectedIndexChanged="dd1_SelectedIndexChanged" 
         AutoPostBack="true"  /> 
      <asp:Label ID="label1" runat="server" />
   </ItemTemplate>
</asp:Repeater>

代码隐藏

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
   //How to get this label1
   //label1.Text = "Message" ;
}

如何在自动回发后检索中继器中的同级/邻居控件

您可以使用

Control.Parent Property。

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
    var dropdownlist = sender as DropDownList;
    var label = dropdownlist.Parent.FindControl("label1") as Label;
    label.Text = "Message";
}

或 control.namemingContainer 属性

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
    var dropdownlist = sender as DropDownList;
    var label = dropdownlist.NamingContainer.FindControl("label1") as Label;
    label.Text = "Message";
}

您可以抓取下拉列表的同级,如下所示:

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
    var theDropDownList = sender as DropDownList;
    // Make sure we have the drop down list before we try to use it
    if(theDropDownList != null)
    {
        // Find the naming container of the drop down list
        var theRepeaterItem = control.NamingContainer as RepeaterItem;
        // Make sure we have the repeater item before we try to use it
        if (theRepeaterItem != null)
        {
            // Find the the label by name
            var theLabel = theRepeaterItem.FindControl("label1") as Label;
            // Make sure we have the label before we try to use it
            if(theLabel != null)
            {  
                // Do what you want with the label here
                theLabel.Text = "Message";
            }
        }
    }
}