如何在数据列表中查找下拉列表的控件

本文关键字:查找 下拉列表 控件 列表 数据 | 更新日期: 2023-09-27 18:34:52

我有一个DataList,里面有一个DropDownList:

  <asp:DataList ID="dlconfigureItem" runat="server">
    <ItemTemplate>
    <asp:DropDownList CssClass="config-select" ID="ddlitem    runat="server"></asp:DropDownList>
  </ItemTemplate>
  </asp:DataList>

如何在服务器端获取 DropDownList 的 selectedindexchanged 事件?我试过这个:

   public void ddlitem_selectedindexchanged (object sender, EventArgs e)
    {
    }

但它不起作用。

如何在数据列表中查找下拉列表的控件

您已经定义了服务器端方法:

public void ddlitem_selectedindexchanged (object sender, EventArgs e)
{
}

但是你没有告诉客户端有一个事件适合你,所以在HTML代码中告诉它:

 onselectedindexchanged="ddlitem_selectedindexchanged"

并将"自动回发"属性设置为 true。

SelectedIndexChanged事件来看,最简单的方法是将sender投射到DropDownList

var ddl = (DropDownList)sender;

发送方始终是作为事件源的控件。

为了完整起见,从DataList ItemDataBound

protected void dlconfigureItem_ItemDataBound(object sender, DataListItemEventArgs e) 
{
    DropDownList ddlitem = e.Item.FindControl("ddlitem") as DropDownList;
    if (ddlitem != null)
    {
        // ...
    }
}

编辑:你忘了注册活动吗?

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"    
    runat="server">
</asp:DropDownList>

请注意,不应在回发时将 DataList 绑定到其数据源,否则不会触发事件。因此,请检查页面的IsPostBack属性。

例如在page_load

if(!IsPostBack)BindDataList();

注册事件并设置AutoPostBack="true"

<asp:DropDownList CssClass="config-select" 
    ID="ddlitem" 
    AutoPostBack="true"
    OnSelectedIndexChanged="ddlitem_selectedindexchanged"    
    runat="server">
</asp:DropDownList>

事件(在选定的索引更改时,您可以获得选定的值(

    protected void ddlCategory_SelectedIndexChanged(object sender, EventArgs e)
    {
        var ddlList = (DropDownList)sender;
        string selectedValue = ((DropDownList)ddlList.NamingContainer.FindControl("ddlitem")).SelectedValue;   
    }

不确定是否无法在服务器上获取所选项目,或者找不到处理事件的方法。如果您的问题与事件处理有关,请尝试此操作

  <asp:DataList ID="dlconfigureItem" runat="server">
    <ItemTemplate>
    <asp:DropDownList CssClass="config-select" ID="ddlitem" 
       OnSelectedIndexChanged="ddlitem_selectedindexchanged" 
       AutoPostBack="true" runat="server"></asp:DropDownList>
  </ItemTemplate>
  </asp:DataList>