2013-11-25 7 views
2

У меня возникла проблема с добавлением некоторых элементов управления в 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:

Page_LOadComplete-Code

Как вы можете видеть, он также попадает под контроль (я думаю). 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

+1

Вы должны ** re ** - создать все динамически созданные элементы управления в 'Page_Load' (самое позднее) с теми же идентификаторами, что и раньше. В противном случае события не запускаются. –

+0

@TimSchmelter Спасибо за ответ! Я создаю их каждый раз каждый раз, но все же - он не работает ... – DatRid

ответ

0

Хорошо, сдалась ... Если кто-то все-таки есть ответ, это было бы здорово!

Прямо сейчас я не использую OnCheckedChanged -Event of CheckBoxes. Я просто позволю им выбрать CheckBox и на OnClickButtonOk Я прохожу через CheckBoxes и проверьте, какой из них выбран.

Смежные вопросы