Хорошо, так что это может быть не самый лучший ответ, но я думаю, что у вас проблема в том, что UpdatePanel просто не может видеть событие дочернего элемента управления. Хорошая новость в том, что это легко исправить. Скажем, у вас есть элемент управления (CatchMyEvent, который, кстати, является сумасшедшим умным именем) и на нем есть DropDownList. Теперь вы хотите, чтобы родительская страница увидела огонь события SelectedIndexChanged в этом списке и обновила метку в соответствии с SelectedItem.Text. На самом деле, родитель не может этого сделать. Итак, давайте изменим это:
public partial class CatchMyEvent : System.Web.UI.UserControl
{
public delegate void ChangedIndex(object sender, EventArgs e);
public event ChangedIndex SelectedIndexChanged;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
dropDownListThrow.SelectedIndexChanged += new EventHandler(dropDownListThrow_SelectedIndexChanged);
labelOutput.Text = "no";
}
public void dropDownListThrow_SelectedIndexChanged(object sender, EventArgs e)
{
labelOutput.Text = ((DropDownList)sender).SelectedItem.Text;
if(SelectedIndexChanged != null)
{
SelectedIndexChanged(sender, e);
}
}
}
По сути, все, что я сделал, - это чтобы элемент управления перехватил событие SelectedIndexChanged DropDownList и запустил его, чтобы любая родительская страница или элемент управления могли его видеть. По сути, все, что я сделал, это передал. Теперь на родительской странице это действительно легко сделать.
Вам просто нужно добавить UpdatePanel с триггером, который содержит:
<asp:AsyncPostBackTrigger ControlID="catchMyEventMain" EventName="SelectedIndexChanged" />
... и, конечно, добавьте это к коду для родительской страницы:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
catchMyEventMain.SelectedIndexChanged += dropDownListThrow_SelectedIndexChanged;
}
public void dropDownListThrow_SelectedIndexChanged(object sender, EventArgs e)
{
labelSelectedValue.Text = ((DropDownList)sender).SelectedItem.Text;
}
Где метка является упомянутой ранее меткой. И тогда пусть случится магия.
Также две заметки:
1) Не будьте идиотом, каким я был при тестировании, и не забудьте установить для свойства AutoPostBack в DropDownList значение true.
2) Убедитесь, что метка находится в ContentTemplate элемента UpdatePanel.
Надеюсь, это поможет.