Ситуация:ASP.NET жизненного цикла дихотомии: Динамически добавляемые элементы управления и события
Разбитое Раствор А:
- Page_Load: Динамически создать кнопку Add, Крюк щелчок событие.
- Пользователь нажимает кнопку «Добавить», вызывает обратную передачу.
- Page_Load: создает кнопку добавления, как обычно, и перехватывает событие click.
- Page_Load: Не известно, что кнопка «Добавить» еще нажата, поэтому она не знает, чтобы вызвать пользовательский элемент управления!
- AddButton_Click: Страница, наконец, осознает, что новый пользовательский элемент управления должен быть добавлен на следующей странице_Load.
- Пользователь не может видеть элемент управления, который они добавили, потому что запущена другая Page_Load.
- Пользователь перезагружает страницу, нажав кнопку, обновив страницу и т. Д.
- Page_Load: создает кнопку добавления и перехватывает событие click. Теперь, узнав о добавленном пользовательском элементе управления, создается пользовательский контроль. Закрепляет события внутри пользовательского элемента управления.
- Пользователь нажимает кнопку в пользовательском элементе управления, триггеры просто отлично.
Результат: пользователь нажал кнопку «Добавить новый пользовательский элемент управления», сервер знает, что элемент управления должен существовать, но пользователь не видит его, пока он не запустит загрузку страницы (нажав другую кнопку или освежающий и т. д.).
Естественно, я взглянул на жизненный цикл и увидел, что после событий происходит Page_LoadComplete, поэтому, если я помещаю какой-либо зависящий от события код в Page_LoadComplete, все должно быть хорошо?
Разбитое Раствор B:
- Page_LoadComplete: Динамически создать кнопку Add, Крюк щелчок событие.
- Пользователь нажимает кнопку «Добавить», вызывает обратную передачу.
- Page_LoadComplete: создает кнопку добавления, как обычно, и перехватывает событие click.
- AddButton_Click: Страница, в которой должно быть добавлено новое пользовательское управление на следующем Page_LoadComplete.
- Page_LoadComplete: осознавая щелчок на кнопке, динамически добавляет элемент управления со своим собственным внутренним событием нажатия кнопки.
- Пользователь нажимает кнопку в добавленном пользовательском элементе управления, но не запускается!
Результат: все работает отлично, за исключением того, что кнопка внутри добавленного пользовательского элемента управления инертна.
Голосование: мне нужны элементы управления, которые порождаются нажатием кнопки, что означает, что мне нужно поставить код Controls.Add(...)
в Page_LoadComplete. И наоборот, мне нужно, чтобы элементы управления были добавлены к рабочим событиям, а это значит, что код Controls.Add(...)
должен находиться в Page_Load. У меня отличная дихотомия.
Единственное решение janky, о котором я могу думать, принимает решение A и заставляет страницу перезагружать вручную после нажатия кнопки «Добавить», что является пустой тратой полосы пропускания и обработки.
Кнопка «Добавить» должна выполнять свою магическую клиентскую сторону, используя Javascript или jQuery. Код на стороне сервера не будет работать здесь, если вы не намереваетесь совершать кругооборот (т. Е. Отправлять) страницу каждый раз, когда нажимают кнопку «Добавить». –
На данный момент, когда он делает ТОЛЬКО после каждой кнопки, это не конец света (пока). Проблема состоит в том, что из-за их жизненного цикла мое лучшее решение состоит в том, чтобы его POST дважды. Если это лучшее, что я могу сделать, это значительный недостаток в планировании ASP.NET, что меня огорчает. – Yerg