Сначала убедитесь, что привязка данных не сбрасывает выпадающие списки.
Вот код для элемента управления, который будет вложен в повторитель ItemTemplate
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ListBoxContainer.ascx.cs" Inherits="OAAF.Common.ListBoxContainer" %>
<asp:ListBox ID="lstFromControl" runat="server" Rows="1" DataTextField="Text" DataValueField="Id" OnSelectedIndexChanged="LstFromControl_SelectedIndexChanged" AutoPostBack="true" />
Код для элемента управления, который будет вложен в повторитель ItemTemplate
public partial class ListBoxContainer : System.Web.UI.UserControl
{
//declare the event using EventHandler<T>
public event EventHandler<EventArgs> ListBox_SelectedIndexChanged;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LstFromControl_SelectedIndexChanged(object sender, EventArgs e)
{
//fire event: the check for null sees if the delegate is subscribed to
if (ListBox_SelectedIndexChanged != null)
{
ListBox_SelectedIndexChanged(sender, e);
}
}
}
Обратите внимание, что этот элемент управления использует внутреннее событие изменения списка, а затем запускает собственное событие: ListBox_SelectedIndexChanged. Вы также можете создавать собственные аргументы событий, но для этого используются стандартные EventArgs.
Ваш ретранслятор, который имеет управление, может выглядеть следующим образом
<asp:Repeater ID="rptTest" runat="server">
<ItemTemplate>
<br />
<ctrl:wucListBox ID="listBoxControl" runat="server" OnListBox_SelectedIndexChanged="ListBoxControl_SelectedIndexChanged" />
</ItemTemplate>
</asp:Repeater>
Зарегистрировать элемент управления в верхней части страницы, на которой включен повторитель, например
<%@ Register Src="~/Common/ListBoxContainer.ascx" TagName="wucListBox" TagPrefix="ctrl" %>
Он обрабатывает событие ListBox_SelectedIndexChanged, а метод, который обрабатывает это, находится в коде позади страницы, на которой расположен повторитель.
protected void ListBoxControl_SelectedIndexChanged(object sender, EventArgs e)
{
//some code
}