Как получить динамически добавленные кнопки ASP.NET для запуска событий? - PullRequest
2 голосов
/ 10 декабря 2008

Это, вероятно, простой вопрос, но я не являюсь разработчиком ASP.NET, и я довольно застрял.

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

Однако, когда я нажимаю кнопку, событие вообще не запускается. Как заставить его работать?

Код для построения списка кнопок (упрощенный для удобства чтения) выглядит следующим образом:

    foreach (SearchResult sr in searchResults)
    {
        Button result = new Button();
        result.Text = sr.name;
        result.CommandArgument = sr.ID.ToString();
        AccountSearchResults.Controls.Add(result);
        result.Click += new EventHandler(SearchResultClicked);
        AccountSearchResults.Controls.Add(new LiteralControl("<br/>"));
    }

В момент проверки я вставил в форму метку для добавления CommandArgument. Хотя этот код никогда не выполняется.

   void SearchResultClicked(object sender, EventArgs e)
    {
        Label1.Text = ((Button)sender).CommandArgument;
    }

Ответы [ 3 ]

1 голос
/ 10 декабря 2008

Вы упомянули в другом ответе, что добавляете их при нажатии кнопки. Глядя на ваш код, я бы посоветовал вам попробовать установить уникальный идентификатор для каждой добавленной кнопки, а затем убедиться, что при загрузке страницы кнопки с одинаковыми идентификаторами и значениями CommandArgument перезагружаются. При нажатии динамически загруженной кнопки она должна существовать на странице после обратной передачи, чтобы событие сработало.

Я думаю, что ID - это все, что вам нужно, плюс ваше требование для CommandArgument). Вы можете поместить информацию об идентификаторе в ViewState, если вы не можете повторить ее без длительного процесса поиска.

0 голосов
/ 10 декабря 2008

Куда вы добавляете эти кнопки?

если вы добавляете их в другой элемент управления, то событие может возникать в родительском элементе управления Это происходит, например, с DataRepeaters и DataGrids.

0 голосов
/ 10 декабря 2008

Я думаю, что вам нужно использовать обработчик событий OnCommand, а не OnClick, т.е. попробуйте изменить это:

result.Click += new EventHandler(SearchResultClicked);

к этому:

result.Command += new EventHandler(SearchResultClicked);

UPDATE

Попробуйте изменить тип второго аргумента для обработчика событий с EventArgs на CommandEventArgs . Вам также может потребоваться установить свойство CommandName для вашей кнопки, т.е.

result.CommandName = "foo";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...