Como faço para obter adicionados dinamicamente botões ASP.NET para acionar eventos?

votos
2

Esta é provavelmente uma pergunta simples, mas eu não sou um desenvolvedor ASP.NET e estou muito preso.

Eu tenho uma rotina de busca simples que retorna entre zero e várias centenas de resultados. Cada um deles deve ser adicionado à página como um botão e eu quero definir o texto do botão ea propriedade CommandArgument de modo que quando o botão é clicado eu posso ler o CommandArgument trás e reagir em conformidade.

No entanto, quando clico no botão do evento não é executado em tudo. Como posso obtê-lo para executar?

O código para construir a lista de botões (simplificado para facilitar a leitura) é a seguinte:

    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/>));
    }

No minuto para testar, eu apareci um rótulo no formulário para colocar o CommandArgument. Este código nunca é executado embora.

   void SearchResultClicked(object sender, EventArgs e)
    {
        Label1.Text = ((Button)sender).CommandArgument;
    }
Publicado 10/12/2008 em 11:55
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Você mencionou em outra resposta que você está adicionando estes quando um botão é clicado. Olhando para o seu código, eu sugeriria que você tentar definir uma identificação única para cada botão adicionado, em seguida, garantir que no carregamento da página que os botões com os mesmos IDs e valores CommandArgument são recarregados. Quando um botão carregado dinamicamente é clicado, ele ainda deve existir na página após postback para o evento para disparar.

Eu acho que o ID é tudo que você precisa, além de sua exigência para o CommandArgument). Você poderia colocar as informações de identificação no ViewState, se você não pode obtê-lo repetir sem um processo de busca de comprimento.

Respondeu 10/12/2008 em 12:18
fonte usuário

votos
0

Onde você está adicionando este botão?

se você estiver adicionando-os dentro de outro controle, em seguida, o evento poderia ser levantando no controle pai. Isso acontece em DataRepeaters e DataGrids por exemplo.

Respondeu 10/12/2008 em 12:11
fonte usuário

votos
0

Eu acho que você precisa usar o manipulador de eventos OnCommand, ao invés do OnClick ou seja, tentar alterar isto:

result.Click += new EventHandler(SearchResultClicked);

para isso:

result.Command += new EventHandler(SearchResultClicked);

ATUALIZAR

Tente alterar o tipo de segundo argumento para o seu manipulador de eventos de EventArgs para CommandEventArgs . Você também pode ter que definir a propriedade CommandName em seu ie botão

result.CommandName = "foo";
Respondeu 10/12/2008 em 11:58
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more