Como posso passar dados de uma página aspx para um pop-up modal ascx?
-
08-06-2019 - |
Pergunta
Sou bastante novo no ASP.NET e estou tentando aprender como as coisas são feitas.Eu venho de uma experiência em C#, então a parte do code-behind é fácil, mas pensar como um desenvolvedor web não é familiar.
Eu tenho uma página aspx que contém uma grade de caixas de seleção.Eu tenho um botão que é codificado por meio de um evento Button_Click para coletar uma lista de quais linhas são verificadas e criar uma variável de sessão a partir dessa lista.O mesmo botão é referenciado (via TargetControlID) pelo ModalPopupExtender da minha página ascx, que controla o painel na página ascx.
Quando o botão é clicado, o pop-up modal é aberto, mas o evento Button_Click nunca é acionado, portanto o modal não obtém os dados da sessão.
Como as duas páginas são separadas, não consigo chamar ModalPopupExtender do código aspx.cs, não consigo acessar a lista de caixas de seleção do código ascx.cs e não vejo uma maneira de preencher minha variável de sessão e, em seguida, ativar programaticamente algum outro botão ou controle oculto que abrirá meu pop-up modal.
Alguma ideia?
Solução
Tudo o que um arquivo usercontrol (.ascx) é é um conjunto de controles que você agrupou para fornecer alguma funcionalidade reutilizável.Os controles definidos nele ainda são adicionados à coleção de controles da página (.aspx) durante o ciclo de vida da página.O ModalPopupExtender usa javascript e dhtml para mostrar e ocultar os controles no usercontrol do lado do cliente.O que você está vendo é que o evento click está sendo tratado no lado do cliente pelo ModalPoupExtender e está cancelando o post-back no servidor.Este é o comportamento padrão por design.Você certamente pode acessar a coleção de controles da página a partir do código por trás do seu controle de usuário, porque tudo faz parte da mesma árvore de controle.Basta usar o método FindControl(xxx) de qualquer controle para procurar o filho que você precisa.
Outras dicas
Depois de algumas pesquisas seguindo a resposta de DancesWithBamboo, descobri como fazer funcionar.
Um exemplo de referência à minha página ascx dentro da minha página aspx:
<uc1:ChildPage ID="MyModalPage" runat="server" />
O code-behind aspx para capturar e abrir o ModalPopupExtender (chamado modalPopup) ficaria assim:
AjaxControlToolkit.ModalPopupExtender mpe =
(AjaxControlToolkit.ModalPopupExtender)
MyModalPage.FindControl("modalPopup");
mpe.Show();
Desculpe, mas estou confuso.Você não pode chamar um ascx diretamente, então...
É o seu código modal que você está chamando na mesma página, como um painel oculto, etc;
Ou é outra página aspx que você está chamando em um evento de clique?