UpdatePanel per un ModalPopupExtender Ajax visibile nella pagina

giovedì 08 gennaio 2009 - 14.00

Leonida Profilo | Junior Member

Ciao a tutti,

Rieccomi di nuovo qui dopo un breve periodo. Vi espongo il poblema. Voglio visualizzare delle informazioni in una ModalPopupExtender AJAX, ho quindi creato il mio buon tag ScriptManager, il mio buon UpdatePanel e infine la ModalPopupExtender che si apre quando viene intercettato un evento Click di un Button chiaramente esterno all' UpdatePanel. Ho 2 problemi fondamentalmente:

1. Il codice all'interno dell' UpdatePanel è visibile nella pagina. Ho provato a impostare l'attributo "visible" a false ma in questo caso non viene aperto il ModalPopup.

2. Quando viene premuto il pulsante ed eseguito il ModalPopup, l'evento click del pulsante dorebbe essere intercettato e da codice C# devono essere eseguite una serie di operazioni. Purtroppo l'apertura della finestra modale implica il blocco della pagina. Come posso aggirare il problema?

Potete aiutarmi? Riporto anche una parte di codice, spero sia sufficiente:-

<asp:ScriptManager runat="server" ID="SMRegistraDocente"></asp:ScriptManager>

<asp:UpdatePanel ID="UDPMsg" runat="server" EnableViewState="true" UpdateMode="Conditional" Visible="false">
<ContentTemplate>

<!-- Visualizza form in un ModalPopupExtender-->

<div id="DAnagraficaDocenti" class="PopUpDivRegistraDocente">
</ContentTemplate>
</asp:UpdatePanel>

<ajaxToolkit:ModalPopupExtender ID="MPEAnagrafica"
runat="server"
TargetControlID="BConfermaRicerca"
PopupControlID="DAnagraficaDocenti"
OkControlID="BConferma"
X="150" Y="30" Enabled="false">
</ajaxToolkit:ModalPopupExtender>

Oltre questi problemi ho una domanda: esiste un attributo da impostare per consentire di trascinare la finestra sullo schermo?

rossimarko Profilo | Guru

Ciao,

invece che un div usa un controllo runat="server" come il panel. Alla fine il panel verrà visualizzato come un div html ma l'extender potrà gestirne la visualizzazione.

Per spostare la finstra di popup hai una proprietà PopupDragHandleControlID. L'esempio fornito con il toolkit fa proprio quello che vuoi tu: http://www.asp.net/ajax/ajaxcontroltoolkit/samples/modalpopup/modalpopup.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Ok, grazie, provo e ti faccio sapere se funziona ;)

Leonida Profilo | Junior Member

Ciao,

Ho sostituito l'ID con quello della update panel ma mi da lo stesso identico problema...eppure la logica del modal popup extender dovrebbe essere proprio quella di tenere nascosto un div finquando non si verifica un evento...o sbaglio? Forse non imposto correttamente alcuni parametri? HELP!!!!!!!!

rossimarko Profilo | Guru

>Ciao,
>
>Ho sostituito l'ID con quello della update panel ma mi da lo
>stesso identico problema...eppure la logica del modal popup extender
>dovrebbe essere proprio quella di tenere nascosto un div finquando
>non si verifica un evento...o sbaglio? Forse non imposto correttamente
>alcuni parametri? HELP!!!!!!!!

Non vedi mettere l'updatepanel, ma devi sostituire il div
<div id="DAnagraficaDocenti" class="PopUpDivRegistraDocente">
con un Panel
<asp:Panel id="DAnagraficaDocenti" runat="server">


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Bah, niente da fare, continua a dare lo stesso problema

rossimarko Profilo | Guru

Hai provato ad eseguire l'esempio del toolkit?

Se hai scaricato il toolkit con i sorgenti dovresti avere un progetto SampleWebSite che corrisponde al sito visibile online. Puoi confrontare il contenuto della pagina e vedere le differenze.

Modicato: Mentre controllavo il codice ho visto che il tuo modal popup è disabilitato.. Hai provato a togliere Enabled="false" ?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Si, l'avevo impostato a false per cercare di risolvere il problema, ho dimenticato di reimpostarlo a true, ma l'errore c'è sempre. Ho provato a rimuovere tutto a eccezione dell'intestazione nell'updatepanel e andava bene, ma quando aggiunto altro codice ha dato nuovamente lo stesso problema. La cosa strana è che lasciando nuovamente solo il codice relativo all'intestazione, non ha comunque funzionato correttamente.

rossimarko Profilo | Guru

Allora prova a controllare le differenze con la form di esempio che trovi nei sorgenti.
Una cosa che ho visto ad esempio è che non usa lo scriptManager normale ma quello del toolkit:

<ajaxToolkit:ToolkitScriptManager runat="Server" ID="ScriptManager1" />

Poi loro nel panel mettono: Style="display: none"

Altra cosa, prova a mettere il modalPopUp e gli altri controlli fuori dall'updatePanel, non è detto che dentro ad un UpdatePanel funzionino..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Sembra funzionare chiudendo tutto in un panel e impostando in Style l'attributo display a none, mentre un panel più interno serve per poter impostare il parametro PopupDragHandleControlID del modal per poter spostare la finestra sullo schermo tramite mouse:

<asp:ScriptManager runat="server" ID="SMRegistraDocente">

<asp:Panel ID="PMsg" runat="server" Style="display:none">
<asp:Panel ID="PMove" runat="server" >
Contenuto modal popup </asp:Panel>
</asp:Panel>
</asp:Panel>

<ajaxToolkit:ModalPopupExtender ID="MPEAnagrafica"
runat="server"
TargetControlID="BConfermaRicerca"
PopupControlID="PMsg"
OkControlID="BConferma"
X="150" Y="30"
PopupDragHandleControlID="PMove">
</ajaxToolkit:ModalPopupExtender>

Chiaramente la definizione del modal popup dev'essere esterna al panel. Lo script manager è richiesto, se si omette sarà sollevata un'eccezione.

Ora però vorrei capire quali sono gli eventi che possono essere intercettati sul modal popup, anche perchè come scritto all'inizio, quando si preme un determinato pulsante e viene lanciato il modal, si blocca la pagina, quindi non posso sfruttare l'evento click sullo stesso pulsante per eseguire certe operazioni ma devo necessariamente sfruttare gli eventi del modal.

Puoi aiutarmi? In pratica mi serve qualcosa che intercetta l'esecuzione del modal popup.

rossimarko Profilo | Guru

Che cosa devi gestire sulla pressione del pulsante?

La pop up può essere richiamata anche da codice, senza agganciare un controllo per la visualizzazione. Se guardi l'esempio del toolkit ci sono due link che simulano il comportamento da codice e all'interno della gestione evento del link trovi:
protected void showModalPopupServerOperatorButton_Click(object sender, EventArgs e) { this.programmaticModalPopup.Show(); } protected void hideModalPopupViaServer_Click(object sender, EventArgs e) { this.programmaticModalPopup.Hide(); }
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

In pratica c'è un primo pulsante. Quando si clicca compare una textbox per l'inserimento dei dati da cercare e un ulteriore pulsante di conferma. Quando si clicca sul pulsante di conferma, la TB e il pulsante devono essere nascosti e i dati cercati devono essere caricati nella modalpopup.

Dato che il click sulla modal è intercettato da quest'ultima, non viene eseguito il codice in C# per la gestione dell'evento click sul pulsante di conferma.

rossimarko Profilo | Guru

Allora prova a fare il tutto da codice. Togli il riferimento al pulsante nell'extender e richiama la show all'interno dell'evento del pulsante dopo aver eseguito le operazioni che ti interessano
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Non posso, da un errore, anche se lascio il campo vuoto o uso un id di un quasiasi altro elemento, l'unica sarebbe creare un pulsante "esca" e usare questo come riferimento impostandolo a invisibile, ma preferirei usare un metodo più pulito.

rossimarko Profilo | Guru

Se il campo è obbligatorio non vedo molte altre soluzioni (http://davefrank.com/archive/2007/02/16/Dynamically-Created-ModalPopupExtender.aspx)

Prima di usare il pulsante nascosto puoi provare ad impostare come targetControlID il controllo Panel
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Leonida Profilo | Junior Member

Ok, sembra funzionare impostando il control sull'id del panel, ti ringrazio per l'aiuto, ora faccio qualche test, non si può mai sapere
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5