Динамически добавляемая кнопка ASP.Net не может вызвать событие Click или CommandArgument

Я добавляю x кнопок в веб-приложение asp.net. Вот мой код для этого:

int i = 0;
foreach(var foo in bar){
    Button b = new Button();
    b.ID = "button" + i.ToString();
    b.CommandName = "var_value";
    b.CommandArgument = foo;
    b.Command += Execute_Command;

    //add to panel p
    p.Controls.Add(b);

    i++;
}

private void Execute_Command(object sender, CommandEventArgs e){
    //do stuff
}

Метод Execute_Command никогда не вызывается. Кнопки отображаются нормально, и когда я отлаживаю, им назначается имя команды и правильный аргумент команды. Я не уверен, что делаю не так.


person Skettenring    schedule 10.11.2016    source источник


Ответы (1)


Кнопки создаются динамически, поэтому их нет в дереве элементов управления. В результате, когда вы запускаете событие щелчка, оно не может запускать событие Command.

Чтобы исправить это, вам нужно будет перезагрузить динамически созданные кнопки в событии Page_Init или Page_Load на < strong> каждая обратная передача с одинаковыми идентификаторами.

Например,

protected void Page_Init(object sender, EventArgs e)
{
   int i = 0;
   foreach(var foo in bar){
      Button b = new Button();
      b.ID = "button" + i.ToString();
      b.CommandName = "var_value";
      .CommandArgument = foo;
      b.Command += Execute_Command;

      //add to panel p
      p.Controls.Add(b);

      i++;
   }
}
person Win    schedule 10.11.2016
comment
Это сработало! Метод, содержащий этот код, был вызван внутри if (! IsPostBack) Спасибо !! - person Skettenring; 10.11.2016