Repeater中的DropDownList:如何处理SelectedIndexChange并获取DataItem?

Axi*_*ili 6 .net c# asp.net repeater

我将一个DropDownList与AutoPostBack放在Repeater中.
(ListItems填充在转发器的ItemDataBound上)

<asp:Repeater ID="rptWishlist" OnItemCommand="rptWishlist_ItemCommand" onItemDataBound="rptWishlist_ItemDataBound" runat="server">
  <ItemTemplate>
    ...
    <asp:DropDownList ID="ddlSize" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlSize_SelectedIndexChanged" />
    ...
Run Code Online (Sandbox Code Playgroud)
  1. 首先,这个功能甚至没有在回发后被解雇

    protected void ddlSize_SelectedIndexChanged(object sender, EventArgs e)
    {
    //This function is never called
    }

  2. 在我使用DataItem之后,我将如何获得它?

我这样做是错误的吗?

先感谢您.

小智 13

要注册回发的下拉列表,请添加以下代码:

 protected virtual void RepeaterItemCreated(object sender, RepeaterItemEventArgs e)
    {
        DropDownList MyList = (DropDownList)e.Item.FindControl("ddlSize");
        MyList.SelectedIndexChanged += ddlSize_SelectedIndexChanged;
    }
Run Code Online (Sandbox Code Playgroud)

在您的aspx文件中,将其添加到转发器标记:

OnItemCreated="RepeaterItemCreated"
Run Code Online (Sandbox Code Playgroud)

然后,在ddlSize_SelectedIndexChanged函数中,您可以像这样访问父控件:

   DropDownList d = (DropDownList)sender;
   (RepeaterItem) d.Parent...
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.