Боже мой! Я знал, что это будет что-то глупое. Чисто моя вина, конечно, и мое отсутствие знаний в ASP .NET.
После множества поисков в Google и, в конечном итоге, их заблокировало Google по подозрению в том, что он бот, выполняющий автоматические скрипты, мне удалось в последний раз протиснуться и наткнуться на эту статью Уже в момент сдачи, я старался изо всех сил читать статью, не пропуская 10 строк за раз или ища красивые картинки. В разделе под названием Назначение идентификаторов для динамически создаваемых элементов управления я прочел следующие волшебные и самые радостные слова:
Если вы просматриваете исходный HTML-код до того, как нажмете нерабочую кнопку, и после того, как нажмете ее, вы заметите небольшую разницу. Кнопки имеют разные идентификаторы HTML до и после постбэка. Я получил ctl04 и ctl05 до постбека и ctl02 и ctl03 после постбека.
Кнопка ASP.NET распознает события, проверяя значение своего идентификатора в коллекции Request.Form. (По правде говоря, это происходит иначе, и элементы управления не проверяют сбор Request.Form самостоятельно. Страница передает данные поста элементам управления по их идентификаторам и элементам управления, которые зарегистрированы для уведомления о данных поста). ASP.NET не запускает событие Click, потому что идентификатор кнопки менялся между постбеками. Кнопка, которую вы нажали, и кнопка, которую вы видите после, являются разными кнопками для ASP.NET.
Конечно, при первом просмотре HTML-кода у моей кнопки был идентификатор ctl04$ctl36
. После нажатия на кнопку у моей кнопки был идентификатор ctl04$ctl33
.
Итак, вот оно! Все, что мне нужно было сделать, это установить ID на кнопках и просто! Мои обработчики событий теперь вызываются!
Пример раствора:
public override Control GetAdministrationInterface()
{
// more code...
Button btn = new Button();
btn.Text = "Click Me!";
// !!THE BANE OF MY EXISTENCE!!
btn.ID = "The_Bane_of_My_Existence";
// !!THE BANE OF MY EXISTENCE!!
btn.Click += new EventHandler(Btn_Click);
// more code...
}
Какой отличный способ провести два дня ...