Usuário com melhor resposta
Button no asp.net não reconhece evento click em determinados momentos

Pergunta
-
Estou utilizando um UserControl dentro de um modal, que recebe um conteúdo dinâmico, para uma busca, dentro de um PlaceHolder. A pesquisa é renderiza perfeitamente e ainda consigo realizar a busca normalmente. Fechando o modal e reabrindo a pesquisa, digito as informações e tento buscar, neste momento os campos são limpos (é como se o componente atualizasse), e o evento click não chega ser executado. Porém após este processo preenchendo o formulário e buscando, funciona perfeitamente.
Alguma sugestão?
Respostas
-
Consegui resolver o problema!
Toda vez que o controle era adicionado, automaticamente era definido um ID para o controle. Com isso o ascx não reconhecia o controle no primeiro click, só a partir do segundo.
Para resolver criei uma variável do tipo Control e atribui um Id fixo antes de adicioná-lo.
protected void Page_Load(object sender, EventArgs e){ if (!string.IsNullOrEmpty(ControleNome)){ phConteudo.Controls.Clear(); Control child = this.LoadControl(ControleNome); child.ID = "ascx_modal" phConteudo.Controls.Add(this.LoadControl(child)); upForm.Update(); } }
private void CarregarModal(TipoModal tipoModal){ ControleNome = GetNomePagina((TipoModal)tipoModal); phConteudo.Controls.Clear(); Control child = this.LoadControl(ControleNome); child.ID = "ascx_modal" phConteudo.Controls.Add(child); upForm.Update(); }
- Sugerido como Resposta Léo si quinta-feira, 18 de maio de 2017 19:06
- Marcado como Resposta Guilherme Macedo SModerator sexta-feira, 19 de maio de 2017 19:22
Todas as Respostas
-
-
Modal.ascx
<asp:Panel runat="server" class="modal fade bs-example-modal-lg" ID="CTGISModal" role="dialog" aria-labelledby="myLargeModalLabel"> <div class="modal-dialog modal-lg" role="document"> <asp:UpdatePanel ID="upForm" UpdateMode="Conditional" runat="server" class="modal-content"> <ContentTemplate> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title"> <asp:Label ID="lblTitulo" Text="Titulo" runat="server" /> </h4> </div> <div class="modal-body"> <div class="row"> <div class="col-lg-12"> <asp:PlaceHolder ID="phConteudo" runat="server" /> </div> </div> </div> </ContentTemplate> </asp:UpdatePanel> </div> </asp:Panel>
Pesquisa.ascx
<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" ActiveTabIndex="0"> <ajaxToolkit:TabPanel ID="atkPesquisa" HeaderText="Pesquisa" runat="server"> <ContentTemplate> <asp:UpdatePanel runat="server" ID="upPesquisa" UpdateMode="Conditional"> <ContentTemplate> Formulário </ContentTemplate> </asp:UpdatePanel> </ContentTemplate> </ajaxToolkit:TabPanel> </ajaxToolkit:TabContainer>
No Componente principal que é o modal, atribuo o controle em dois métodos
O primeiro é no Page_Load, porem só é executado quando ocorre alguma alteração no UserControl e a pagina necessita receber o controle que já está atribuído.
Modal.ascx.cs
protected void Page_Load(object sender, EventArgs e){ if (!string.IsNullOrEmpty(ControleNome)){ phConteudo.Controls.Clear(); phConteudo.Controls.Add(this.LoadControl(path)); upForm.Update(); } }
E o outro evento é o CarregarModal que é usado a primeira vez que o componente é usado.
Modal.ascx.cs
private void CarregarModal(TipoModal tipoModal){ ControleNome = GetNomePagina((TipoModal)tipoModal); phConteudo.Controls.Clear(); phConteudo.Controls.Add(ControleNome); upForm.Update(); }
Controle adicionado no modal
Neste UserControl criei o método click e atribui no Page_Load tentando solucionar o problema, mas deste jeito ou atribuído diretamente na tag <asp:Button> o resultado é o mesmo.
Pesquisa.ascx.cs
protected void Page_Init(Object senser, EventArgs e) { upPesquisa.Update(); } protected void Page_Load(object sender, EventArgs e) { btnBuscar.Click += click; } void click(object sender, EventArgs e) { metodoBuscar() }
Ao abrir o modal, digitar as informações e buscar, o evento click é acessado, o problema acontece se fecho este modal, abro novamente e tento buscar, a primeira vez que clico no botão ele limpa o formulário e não acessa o método click, em seguida se clico no botão mesmo sem fechar o modal o evento é acessado.
Alguém pode me ajudar?
-
Consegui resolver o problema!
Toda vez que o controle era adicionado, automaticamente era definido um ID para o controle. Com isso o ascx não reconhecia o controle no primeiro click, só a partir do segundo.
Para resolver criei uma variável do tipo Control e atribui um Id fixo antes de adicioná-lo.
protected void Page_Load(object sender, EventArgs e){ if (!string.IsNullOrEmpty(ControleNome)){ phConteudo.Controls.Clear(); Control child = this.LoadControl(ControleNome); child.ID = "ascx_modal" phConteudo.Controls.Add(this.LoadControl(child)); upForm.Update(); } }
private void CarregarModal(TipoModal tipoModal){ ControleNome = GetNomePagina((TipoModal)tipoModal); phConteudo.Controls.Clear(); Control child = this.LoadControl(ControleNome); child.ID = "ascx_modal" phConteudo.Controls.Add(child); upForm.Update(); }
- Sugerido como Resposta Léo si quinta-feira, 18 de maio de 2017 19:06
- Marcado como Resposta Guilherme Macedo SModerator sexta-feira, 19 de maio de 2017 19:22