Usuário com melhor resposta
Identificar Botão que foi clicado

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
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
Todas as Respostas
-
-
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
-
-
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
-
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
-
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