Как получить дескриптор кнопки динамического изображения в обратной передаче панели ajax
-
21-08-2019 - |
Вопрос
Я записываю кнопку изображения в ячейку таблицы в новой строке, когда пользователь выбирает элемент в списке:
ImageButton imgbtnRemove = new ImageButton();
imgbtnRemove.ID = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.CommandName = "uxStandardLetterDeleteImage_" + items.letterName;
imgbtnRemove.ImageUrl = items.remove;
imgStatus.AlternateText = "Remove";
tRow.Cells[3].Controls.Add(imgbtnRemove);
Когда нажимается новая кнопка изображения, я не могу с ней справиться.Я вижу это в событии Page_PreRender, где я также перезагружаю таблицу при каждой обратной передаче.
string returnData = Request.Form.ToString();
но итерация по форме контролирует изображения:
if (c is System.Web.UI.WebControls.Button ||
c is System.Web.UI.WebControls.ImageButton)
не находит его.Я могу найти его, если вручную вставлю:
imgbtnRemove.Click += new System.Web.UI.ImageClickEventHandler(this.ButtonClick);
в Page_Load, а затем захватите его в событии щелчка:
switch (((System.Web.UI.WebControls.ImageButton)sender).CommandName)
...
но поскольку новые строки добавляются и удаляются, с программной точки зрения это становится довольно некрасиво.Я думаю, что должно быть элегантное решение для динамического создания и извлечения кнопок изображений «на лету» из кода на стороне сервера.Я много копал, но это меня поставило в тупик.
Заранее спасибо...
Решение
Если вы создаете динамические элементы управления на этапе обработки событий жизненного цикла страницы (например, в событии выбранного элемента), то при следующей обратной передаче элемент управления исчезнет.
Чтобы динамические элементы управления могли быть зарегистрированы в ViewState, их необходимо создать на этапе инициализации жизненного цикла события.
Кроме того, вы говорите, что перебираете элементы управления формы...когда вы добавляете кнопку изображения в ячейки таблицы.Вы рекурсивно спускаетесь по иерархии элементов управления в поисках кнопки изображения?