Ситуация:
Неисправное решение A:
- Page_Load: динамически создавать кнопку «Добавить», событие щелчка.
- Пользователь нажимает кнопку «Добавить», запускается обратная передача.
- Page_Load: создает кнопку «Добавить» как обычно и перехватывает событие щелчка.
- Page_Load: не знает, что кнопка "Добавить" еще была нажата, поэтому не знает, как создать пользовательский элемент управления!
- AddButton_Click: страница наконец узнала, что новый пользовательский элемент управления должен быть добавлен при следующей загрузке Page_Load.
- Пользователь не может видеть добавленный элемент управления, потому что была запущена другая загрузка Page_Load.
- Пользователь перезагружает страницу, нажимая кнопку, обновляя страницу и т. Д.
- Page_Load: создает кнопку «Добавить» и перехватывает событие щелчка. Теперь, когда известно о добавленном пользовательском элементе управления, создается пользовательский элемент управления. Перехватывает события в пользовательском элементе управления.
- Пользователь нажимает кнопку в пользовательском элементе управления, срабатывает нормально.
Результат: пользователь щелкнул Добавить новый пользовательский элемент управления, сервер знает, что элемент управления должен существовать, но пользователь не видит его, пока не запустит повторную загрузку страницы (нажав другую кнопку или обновив и т. Д.).
Естественно, я взглянул на жизненный цикл и увидел, что Page_LoadComplete происходит после событий, поэтому, если я помещаю какой-либо код, зависящий от событий, в Page_LoadComplete, все должно быть в порядке?
Неисправное решение B:
- Page_LoadComplete: динамически создавать кнопку «Добавить», событие щелчка крючка.
- Пользователь нажимает кнопку «Добавить», запускается обратная передача.
- Page_LoadComplete: создает кнопку «Добавить» как обычно и перехватывает событие щелчка.
- AddButton_Click: страница знает, что новый пользовательский элемент управления должен быть добавлен при следующем завершении Page_LoadComplete.
- Page_LoadComplete: узнавая о нажатии кнопки, динамически добавляет элемент управления с собственным внутренним событием нажатия кнопки.
- Пользователь нажимает кнопку в добавленном пользовательском элементе управления, но не запускается !!
Результат: все работает отлично, за исключением того, что кнопка в добавленном пользовательском элементе управления инертна.
Загадка такова: мне нужно, чтобы элементы управления вызывались нажатием кнопки, а это значит, что мне нужно поместить свой Controls.Add(...)
код в Page_LoadComplete. И наоборот, мне нужно, чтобы добавляемые элементы управления имели рабочие события, а это значит, что код Controls.Add(...)
должен находиться в Page_Load. У меня идеальная дихотомия.
Единственное неприятное решение, которое я могу придумать, - это взять решение А и принудительно перезагрузить страницу вручную после нажатия кнопки «Добавить», что является пустой тратой полосы пропускания и обработки.