ASP.Net - Возможно ли UpdatePanel использовать элемент управления в UserControl в качестве триггера? - PullRequest
0 голосов
/ 08 октября 2009

Я создал пользовательский элемент управления нижнего колонтитула, в который я динамически добавляю элементы управления, основываясь на ряде факторов. Я хочу, чтобы некоторые из этих элементов управления были триггерами для UpdatePanel на той же странице.

У меня есть следующее в коде:

private void SetupFooter()
{

    WebToolBar footerToolBar = this.ShowFooterToolBar("~/ToolBars/PM_Footer.ascx");
    footerToolBar.ID = "PM_Footer";
    footerToolBar.OnNotify += new WebToolBar.OnNotifyHandler(footerToolBar_OnNotify);

    WebToolButton button = new WebToolButton();
    button.ID = "btn_Add";
    button.Text = "Add";
    button.ImageDefault = "~/Images/Icons/16/Plus.png";
    button.CommandName = "Add";
    button.Group = "1";
    footerToolBar.AddWebToolButton(button);


    AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
    trigger.ControlID = button.ID;
    trigger.EventName = "Click";

    pnl_Suppliers.Triggers.Add(trigger);

}

Я получаю ошибку:

Не удалось найти элемент управления с идентификатором 'btn_Add' для триггера в UpdatePanel 'pnl_Suppliers'.

Если я добавлю WebToolButton (в основном ImageButton с текстом, который я сделал) непосредственно на страницу, а не внутри UserControl, то он будет работать отлично. К сожалению, я надеялся, что смогу заставить это работать в моем UserControl («PM_Footer.ascx»), поскольку он инкапсулирует множество вспомогательных функций и перехватчиков событий.

Это вообще возможно? Я держусь за соломинку и попытался вместо этого назначить UniqueID и ClientID панели обновлений, но просто кажется, что любой элемент управления в другом пользовательском элементе управления не может использоваться в качестве триггера для UpdatePanel ... что имеет смысл в некотором смысле.

Ответы [ 2 ]

2 голосов
/ 08 октября 2009

RegisterAsyncPostBackControl может работать, но, как сказал Прити, вам, возможно, придется выставить событие из вашего элемента управления и зарегистрировать это событие. Кроме того, вы динамически добавляете элемент управления, и он должен повторно добавляться при каждой обратной передаче (OnPreRender), чтобы событие происходило правильно.

ScriptManager1.RegisterAsyncPostBackControl(button );

Справка:

Динамически зарегистрировать элемент управления асинхронной обратной передачей с помощью ScriptManager

2 голосов
/ 08 октября 2009

Я не знаю, возможно ли то, что вы просите, но почему бы вам не вызвать пользовательское событие нажатия кнопки через элемент управления WebToolBar? Это событие затем может быть напрямую назначено на триггер.

...