Pregunta

Soy bastante nuevo en ASP.NET y estoy tratando de aprender cómo se hacen las cosas.Tengo experiencia en C#, por lo que la parte del código subyacente es fácil, pero no me resulta familiar pensar como un desarrollador web.

Tengo una página aspx que contiene una cuadrícula de casillas de verificación.Tengo un botón que está codificado mediante un evento Button_Click para recopilar una lista de las filas que se verifican y crear una variable de sesión a partir de esa lista.El ModalPopupExtender de mi página ascx hace referencia al mismo botón (a través de TargetControlID) que controla el panel en la página ascx.

Cuando se hace clic en el botón, se abre la ventana emergente modal pero el evento Button_Click nunca se activa, por lo que el modal no obtiene los datos de su sesión.

Dado que las dos páginas están separadas, no puedo llamar a ModalPopupExtender desde el código aspx.cs, no puedo acceder a la lista de casillas de verificación desde el código ascx.cs y no veo una manera de completar mi variable de sesión. y luego active mediante programación algún otro botón o control oculto que luego abrirá mi ventana emergente modal.

¿Alguna idea?

¿Fue útil?

Solución

Todo lo que es un archivo de control de usuario (.ascx) es un conjunto de controles que ha agrupado para proporcionar alguna funcionalidad reutilizable.Los controles definidos en él aún se agregan a la colección de controles de la página (.aspx) durante el ciclo de vida de la página.ModalPopupExtender usa javascript y dhtml para mostrar y ocultar los controles en el lado del cliente de control de usuario.Lo que está viendo es que ModalPoupExtender maneja el evento de clic en el lado del cliente y cancela la devolución al servidor.Este es el comportamiento predeterminado por diseño.Sin embargo, ciertamente puede acceder a la colección de controles de la página desde el código subyacente de su control de usuario porque todo es parte del mismo árbol de control.Simplemente use el método FindControl(xxx) de cualquier control para buscar el elemento secundario que necesita.

Otros consejos

Después de investigar un poco siguiendo la respuesta de DancesWithBamboo, descubrí cómo hacerlo funcionar.
Una referencia de ejemplo a mi página ascx dentro de mi página aspx:

<uc1:ChildPage ID="MyModalPage" runat="server" />

El código subyacente aspx para capturar y abrir ModalPopupExtender (llamado modalPopup) se vería así:

AjaxControlToolkit.ModalPopupExtender mpe = 
    (AjaxControlToolkit.ModalPopupExtender) 
          MyModalPage.FindControl("modalPopup");
mpe.Show();

Lo siento, pero estoy confundido.No puedes llamar a un ascx directamente, así que...

¿Es su código modal al que está llamando desde dentro de la misma página, como un panel oculto, etc.?

¿O es otra página aspx a la que llama en un evento de clic?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top