none
Identificar Botão que foi clicado RRS feed

  • Pergunta

  • Boa Tarde a todos.
    Estou com um probleminha e gostaria de saber se alguém pode me dar uma dica.
    Seguinte : Estou desenvolvendo uma pagina (ASP.NET) e nessa pagina eu crio alguns botões dinamicamente, o nome dos botões é sempre o mesmo. Como eu faço (no código behind) para descobrir em qual botão o usuário clicou..??
    Eu pensei em usar alguma TAG (na definição do botão) e nessa tag eu colocaria uma identificação única e depois ao recupera-la no código eu saberia qual botão foi clicado.
    Mas não sei qual TAG eu poderia usar para fazer isso...

    Alguma sugestão..??
    Obrigado
    Eduardo

    sexta-feira, 13 de abril de 2018 22:17

Respostas

  • Olá, faça assim e veja se funciona.
    1. Adicione este script na sua página
    <script type="text/javascript">
            function IdBotao(IdBotao) {
                __doPostBack('<%=BtnAgendaTodos.UniqueID %>', IdBotao.id);
            }
        </script>
    2. Depois adicione este botão logo abaixo a tag FORM do seu arquivo aspx
    <asp:Button runat="server" ID="BtnAgendaTodos" OnClick="BtnAgendaTodos_Click" Visible="false" />
    3. Depois adicione o evento onclick no seus botões
    <input type="submit" name="BtnAgenda" value="Agendar" id="BtnAgenda0" class="btn btn-primary btn-lg" onclick="IdBotao(this);"/>4. Copie este método para o seu CodeBehind
    protected void BtnAgendaTodos_Click(object sender, EventArgs e)
            {
                string IdBotao = Request.Params.Get("__EVENTARGUMENT");
            }

    Veja se ele funciona.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    • Marcado como Resposta E.Gameiro quarta-feira, 18 de abril de 2018 15:44
    terça-feira, 17 de abril de 2018 19:31

Todas as Respostas

  • Esse botão que vc cria ele é solto na página ou é dentro de um gridview ?

    Junior

    segunda-feira, 16 de abril de 2018 15:56
  • Olá, acredito que cada botão que você criou ele está com nomes diferentes, sendo assim você pode pegar o valor do TEXT do botão.Ex:

    private void CreateButtons()
            {
                int y = 0;
                int x = 0;
                List<Button> buttons = new List<Button>();
                for (int i = 0; i < 3; i++)
                {
                    Button Btn = new Button();
                    Btn.Text = string.Concat("Botão ", i);
                    Btn.Top += 10;
                    Btn.Click += new EventHandler(MeuBotao_Click);
                    Btn.Location = new Point(3 + y, 14 + x);
                    buttons.Add(Btn);
                    Controls.Add(Btn);
                    y += 100;
                }
            }
            private void MeuBotao_Click(object sender, EventArgs e)
            {
                     string NomeBotao = ((Button)sender).Text;
            }

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    segunda-feira, 16 de abril de 2018 23:39
  • Ola Junior...

    é solto na pagina...

    Abs..

    terça-feira, 17 de abril de 2018 18:46
  • Ola Leandro..

    Na verdade os botões tem o mesmo nome. Isso é proposital porque o code-behind que é disparado ao clicar no botão está associado com o nome do botão. Se eu der um nome diferente para cada botão vou ter que codificar um code-behind para cada um deles e isso fica complicado porque o fonte vai ficar muito grande...

    Qualquer botão que eu aperte aciona o code-behind comum a todos os botões, isso está funcionado.

    É exatamente ai que está o problemas, como todos tem o mesmo nome como eu faço para saber (dentro do code-behind) qual foi clicado...

    Segue um exemplo de como ele está criando o código na pagina...

    <div class="form-group"> <div class="row horarios" id="divCabecalho"> <div class="row centralizado"> <div class="col-md-2 centralizado"> <div class="col-xs-4"> <input name="TextBox1" type="text" id="TextBox1" Value=08:00 class="form-control text-center" /> </div> <div class="col-xs-2"> <input type="submit" name="BtnAgenda" value="Agendar" id="BtnAgenda0" class="btn btn-primary btn-lg" /> </div> </div></div> <div class="row centralizado"> <div class="col-md-2 centralizado"> <div class="col-xs-4"> <input name="TextBox1" type="text" id="TextBox1" Value=08:50 class="form-control text-center" /> </div> <div class="col-xs-2"> <input type="submit" name="BtnAgenda" value="Agendar" id="BtnAgenda1" class="btn btn-primary btn-lg" /> </div> </div></div> <div class="row centralizado"> <div class="col-md-2 centralizado"> <div class="col-xs-4"> <input name="TextBox1" type="text" id="TextBox1" Value=09:40 class="form-control text-center" /> </div> <div class="col-xs-2"> <input type="submit" name="BtnAgenda" value="Agendar" id="BtnAgenda2" class="btn btn-primary btn-lg" /> </div> </div></div>

    Obrigado pela ajuda.

    Eduardo

    terça-feira, 17 de abril de 2018 19:14
  • Olá, faça assim e veja se funciona.
    1. Adicione este script na sua página
    <script type="text/javascript">
            function IdBotao(IdBotao) {
                __doPostBack('<%=BtnAgendaTodos.UniqueID %>', IdBotao.id);
            }
        </script>
    2. Depois adicione este botão logo abaixo a tag FORM do seu arquivo aspx
    <asp:Button runat="server" ID="BtnAgendaTodos" OnClick="BtnAgendaTodos_Click" Visible="false" />
    3. Depois adicione o evento onclick no seus botões
    <input type="submit" name="BtnAgenda" value="Agendar" id="BtnAgenda0" class="btn btn-primary btn-lg" onclick="IdBotao(this);"/>4. Copie este método para o seu CodeBehind
    protected void BtnAgendaTodos_Click(object sender, EventArgs e)
            {
                string IdBotao = Request.Params.Get("__EVENTARGUMENT");
            }

    Veja se ele funciona.

    Abs!


    Leandro de Agostini MCTS - Web Application, Framework 4

    • Marcado como Resposta E.Gameiro quarta-feira, 18 de abril de 2018 15:44
    terça-feira, 17 de abril de 2018 19:31
  • Ola Leandro...

    Eu resolvi o problema. 

    Eu não implementei exatamente o que você sugeriu, mas usei a sua ideia e fiz o seguinte :

    1) Fiz uma rotina JS cuja chamada esta associada ao botão e passa um identificar única em cada botão.

    2) Criei um campo HIDDEN e a rotina JS pega o valor que ela recebeu e coloca nesse campo

    3) No code-behind eu leio o conteúdo desse campo HIDDEN e baseado no valor que estiver lá eu sei qual foi o botão clicado.

    Está funcionado.

    Contudo uma maneira mais elegante no meu modo de ver seria colocar uma "tag" na linha do INPUT r que essa "tag" pudesse ser recuperado dentro do code-behind..... Mas não encontrei nenhuma "tag" que eu pudesse usar.

    De qualquer forma a solução acima está funcionando.

    Obrigado.

    Eduardo

    quarta-feira, 18 de abril de 2018 15:44