Domanda

Sono abbastanza nuovo in ASP.NET e sto cercando di imparare come vengono fatte le cose.Provengo da un background C#, quindi la parte code-behind è semplice, ma pensare come uno sviluppatore web non mi è familiare.

Ho una pagina aspx che contiene una griglia di caselle di controllo.Ho un pulsante codificato tramite un evento Button_Click per raccogliere un elenco di quali righe vengono controllate e creare una variabile di sessione da tale elenco.Allo stesso pulsante fa riferimento (tramite TargetControlID) il ModalPopupExtender della mia pagina ascx che controlla il pannello nella pagina ascx.

Quando si fa clic sul pulsante, il popup modale si apre ma l'evento Button_Click non viene mai attivato, quindi il modale non ottiene i dati della sessione.

Poiché le due pagine sono separate, non posso chiamare ModalPopupExtender dal codice aspx.cs, non riesco a raggiungere l'elenco delle caselle di controllo dal codice ascx.cs e non vedo un modo per popolare la mia variabile di sessione e quindi attivare a livello di codice qualche altro pulsante o controllo nascosto che aprirà quindi il mio popup modale.

qualche idea?

È stato utile?

Soluzione

Un file usercontrol(.ascx) è un insieme di controlli raggruppati insieme per fornire alcune funzionalità riutilizzabili.I controlli definiti in esso vengono comunque aggiunti alla raccolta di controlli della pagina (.aspx) durante il ciclo di vita della pagina.ModalPopupExtender utilizza javascript e dhtml per mostrare e nascondere i controlli nel lato client del controllo utente.Quello che vedi è che l'evento click viene gestito lato client da ModalPoupExtender e sta annullando il post-back al server.Questo è il comportamento predefinito in base alla progettazione.Puoi certamente accedere alla raccolta di controlli della pagina dal code-behind del tuo usercontrol perché fa tutto parte dello stesso albero di controllo.Usa semplicemente il metodo FindControl(xxx) di qualsiasi controllo per cercare il figlio di cui hai bisogno.

Altri suggerimenti

Dopo alcune ricerche in seguito alla risposta di DancesWithBamboo, ho capito come farlo funzionare.
Un esempio di riferimento alla mia pagina ascx all'interno della mia pagina aspx:

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

Il code-behind aspx per acquisire e aprire ModalPopupExtender (denominato modalPopup) sarebbe simile al seguente:

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

Scusa, ma sono confuso.Non puoi chiamare direttamente un ascx, quindi...

È il tuo codice modale che stai chiamando dalla stessa pagina, come un pannello nascosto, ecc.;

Oppure è un'altra pagina ASPX che stai chiamando in caso di clic?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top