#c# #asp.net #button #dynamic #event-handling
#c# #asp.net #кнопка #динамический #обработка событий
Вопрос:
У меня здесь небольшая проблема с динамически генерируемыми кнопками и их обработчиком событий в asp.net . Я создаю гибкую таблицу с дополнительными кнопками для специальных пользователей. Кнопки будут генерироваться динамически, что работает нормально. Но я не могу заставить обработчик событий работать.
Вот несколько фрагментов из моего кода: Создайте кнопку (в собственной функции).
…
Button ButtonChange = new Button();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click = new EventHandler(test);
…
И
void test(object sender, EventArgs e)
{
// Do some stuff
}
Мой Page_Load
пуст.
Но программа не перейдет к тестированию, если я нажму кнопку. Что происходит не так?
Редактировать!!! Проблема в том, что я не знаю с самого начала, сколько строк я получу из своего SQL-запроса обратно. Для каждой строки я добавлю кнопку удаления и изменения. Я вызываю в своей программе метод, который строит результат в виде таблицы. В этом методе я проверяю, является ли текущий пользователь AdminUser, и если он есть, я вызову функцию buildAdminButtons . Здесь я создаю кнопки в новом столбце для каждой строки. Как я мог бы загрузить это в OnLoad?
private void buildAdminButtons(TableRow tempRow, int i)
{
Button ButtonDelete = new Button();
Button ButtonChange = new Button();
TableCell change = new TableCell();
TableCell delete = new TableCell();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonDelete.Text = "Delete";
ButtonDelete.ID = "delete_" i.ToString();
ButtonDelete.Font.Size = FontUnit.Point(7);
ButtonDelete.ControlStyle.CssClass = "button";
change.Controls.Add(ButtonChange);
delete.Controls.Add(ButtonDelete);
tempRow.Cells.Add(change);
tempRow.Cells.Add(delete);
}
Я добавляю к каждой кнопке уникальный идентификатор, который я не знаю с самого начала. Как я мог с этим справиться?
Ответ №1:
Вы должны поместить этот код в page_load
page_init
событие или.
protected void Page_Load()
{
Button ButtonChange = new Button();
ButtonChange.Text = "Change";
ButtonChange.ID = "change_" i.ToString();
ButtonChange.Font.Size = FontUnit.Point(7);
ButtonChange.ControlStyle.CssClass = "button";
ButtonChange.Click = new EventHandler(test);
}
Прочитайте статью MSDN — Как: Добавить элементы управления в ASP.NET Веб-страница программно?
Комментарии:
1. в качестве дополнительного примечания, это динамическое подключение события должно происходить при каждой обратной передаче, но, как сказал AVD, либо в page_load, либо в page_init (иначе до того, как событие срабатывает в жизненном цикле страницы.
2. Достаточно ли инициализировать кнопку в Page_Load? … Я добавляю кнопку в каждую строку таблицы, гораздо проще сгенерировать их кнопки. Спасибо.
3. в статье msdn нет упоминания о динамических элементах управления, у которых есть события. И нет предложения о событиях Page_Load или Page_Init.