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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top