Кнопка asp.net динамически с обработчиком событий - PullRequest
8 голосов
/ 10 октября 2011

У меня здесь небольшая проблема с динамически генерируемыми кнопками и их обработчиком событий в 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-запроса обратно.Для каждой строки я добавлю кнопку удаления и изменения.Я вызываю в моей программе метод, который строит результат в виде таблицы.В этом методе я проверяю, является ли текущий пользователь администратором и, если он, я вызываю функцию 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 Ответ

14 голосов
/ 10 октября 2011

Вы должны поместить этот код в 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?

...