Динамически генерируемая радиокнопка, вызывающая событие CheckedChanged - PullRequest
0 голосов
/ 06 декабря 2010

Это немного сложно объяснить, поэтому, пожалуйста, потерпите меня.

У меня есть процедура, которая генерирует несколько радиокнопок и назначает событие обратной передачи CheckedChanged на основе пройденного уровня (до 4 уровней).Когда проверяется первый уровень (выбран переключатель), вызывается событие обратной передачи rb_CheckChanged00 () и выполняется проверка, чтобы определить, есть ли у этого элемента какие-либо дочерние элементы, если это так, он создаст дополнительные переключатели и назначит rb_CheckChanged01 событию CheckChangedдля них - эта часть работает нормально.

У меня проблема в том, что когда я выбираю вторую радиокнопку, которая была создана (дочерняя), она, похоже, вообще не переходит к событию post back,Страница отправляется обратно, когда я нажимаю на нее, но все сбрасывается, потому что она не переходит в rb_CheckChanged01.

Я знаю, что эта информация довольно расплывчатая, но я надеюсь, что у кого-то есть идея о том, как работает событие обратной отправки.и если я как-то неправильно его использую.

Использование: ASP.NET 2.0, IIS7

Спасибо.

Ответы [ 4 ]

2 голосов
/ 06 декабря 2010

Большую часть времени, когда события динамически создаваемого элемента управления не запускаются, это происходит потому, что элементы управления «сбрасываются» при обратной передаче.

Чтобы убедиться, что одни и те же элементы управления создаются каждый раз, убедитесь, что идентификаторы элемента управления установлены на одно и то же значение каждый раз перед загрузкой ViewState . Таким образом, когда элемент управления добавляется в коллекцию элементов управления страницы, после загрузки ViewState он сохраняет свои свойства. (просто чтобы описать, что происходит, в двух словах)

Одна из лучших статей, которые я читал на эту тему, - эта одна. Обязательно прочитайте его, чтобы полностью понять, что происходит в фоновом режиме.

1 голос
/ 06 декабря 2010

Ваши элементы управления и события не зарегистрированы в ViewState, потому что динамические элементы управления должны быть загружены в Page_Init. Поскольку они не сохраняются в ViewState, они не будут зарегистрированы в событиях. Аналогичный вопрос:

Проблема с динамическими элементами управления в .NET

1 голос
/ 06 декабря 2010

Похоже, что дочерние RB очищаются, прежде чем они смогут вызвать событие. Исходя из моего личного опыта, лучше всего отслеживать эти динамически генерируемые объекты и регенерировать их при каждой обратной передаче. События начнут срабатывать:)

0 голосов
/ 06 декабря 2010

Только одна вещь может вызвать это, вы создаете rb на page_load и не добавляете их в List <> или что-то подобное и этот объект в Session.Что вам нужно сделать, это когда вы создаете элементы, добавляете их в список и добавляете этот список в Session ["RadioButtons"], и если Page.IsPostBack имеет значение true, загружайте элементы управления по одному из списка, который хранится вваша сессия на вашей странице.

...