Ok так что это не может быть лучшим ответом, но я думаю, что проблема вы имея его, что 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;
}
Где label - это упомянутая выше этикетка. И тогда пусть волшебство произойдет.
Также две ноты:
1) Не такой идиот, как я при тестировании этого и забыть установить свойство AutoPostBack на DropDownList к истине.
2) Убедитесь, что метка находится в ContentTemplate UpdatePanel.
Надеюсь, это поможет.
У вас есть другие обновления на странице или внутри вашего контроля? Кроме того, вы можете показать код для обработчика события DropDownList SelectedIndexChanged и определения делегата. – Kon 2008-10-22 13:23:47
Нет, у меня нет никаких других UpdatePanels на странице или в элементе управления. Я отредактирую свое сообщение, чтобы показать обработчик. – 2008-10-22 13:55:55