У меня возникла проблема с добавлением некоторых элементов управления в Panel
(который получает «PopUpped» от ModalPopupExtender
) и добавляет CheckedChanged
-EventHandler.Добавление EventHandler для динамически добавленного элемента управления
Прежде всего, когда пользователь нажимает на кнопку, это происходит:
-> CreatePanelChoose()
foreach (ListItem item in lbSupplier.Items)
{
string cbid = "cb" + i;
CheckBox cb = new CheckBox();
cb.ID = cbid;
cb.Text = item.Text;
cb.AutoPostBack = true;
AjaxControlToolkit.MutuallyExclusiveCheckBoxExtender mecbe = new AjaxControlToolkit.MutuallyExclusiveCheckBoxExtender();
mecbe.ID = "mecbe" + cbid;
mecbe.TargetControlID = cbid;
mecbe.Key = "SupplierKEY";
mecbe.BehaviorID = mecbe.ID + i;
//Also adding a Label
phModalPopupExtender.Controls.Add(new LiteralControl("</br>")); //phModalPopupExtender is a PlaceHolder
phModalPopupExtender.Controls.Add(cb);
phModalPopupExtender.Controls.Add(mecbe);
phModalPopupExtender.Controls.Add(lbl);
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = cbid;
trigger.EventName = "CheckedChanged";
UpdatePanelMatrix.Triggers.Add(trigger);
i++;
ButtonOK.Enabled = false;
}
lblText.Text = "Select one Supplier";
ModalPopupExtender1.Show();
Тогда я добавить EventHandler
в Page_LoadComplete
:
Как вы можете видеть, он также попадает под контроль (я думаю). ModalPopup показывает правильно, но если я нажимаю одну из CheckBox
, то он просто закрывает его, не вдаваясь в cb_CheckedChanged
, но это делает Async постбэк ... Если я проверить Request.Form["__ASYNCPOST"]
его истинный и Request.Form["__EVENTTARGET"]
тоже правильно. (Это дает мне уникальный идентификатор!)
Request.Form["__EVENTARGUMENT"]
пусто.
Думаю, мне также нужно сказать, что я использую главную страницу.
Не могли бы вы помочь мне найти проблему? я не должен быть жизненный цикл страницы, потому что говорит MSDN:
LoadComplete
Выросший в конце стадии обработки событий.
Используйте это событие для задач, требующих загрузки всех других элементов управления на странице.
Его самое местное место заставляет меня думать, что это будет правильно. Btw: да я смотрел корыта темы здесь Allready, но ничего не помогло мне ... (Google Ф.О. уверен также)
Edit 1:
if (IsPostBack)
{
if (recreating == true)
{
CreatePanelChoose();
}
}
В CreatePanelChoose
я сделать foreach
Теперь каждый раз, когда его обратная передача! Но она по-прежнему оленья кожа огонь cb_ChangedChecked
...
Edit 2:
MSDN-Page-Lifecycle также говорит:
PreInit
возведенного после стадии запуска завершена и до начала инициализации начинается этап .
Используйте это событие для следующих целей:
Создать или повторно создавать динамические элементы управления.
Так что я попытался воссоздать панель там. Но у меня нет ListItems для получения значений ...?!
Большое спасибо, Rid
Вы должны ** re ** - создать все динамически созданные элементы управления в 'Page_Load' (самое позднее) с теми же идентификаторами, что и раньше. В противном случае события не запускаются. –
@TimSchmelter Спасибо за ответ! Я создаю их каждый раз каждый раз, но все же - он не работает ... – DatRid