Pop-up con messaggio personalizzato e scelta di proseguire

Respondido Pop-up con messaggio personalizzato e scelta di proseguire

  • sexta-feira, 25 de maio de 2012 07:17
     
     

    Ciao a tutti,
    in una pagina web (con ASP.NET 3.5) avrei bisogno di realizzare un pop-up che mostri all'utente dei dati
     e la possibilità, tramite due pulsanti Sì e No, di proseguire nella sUa operazione o meno.
    Mi spiego meglio:

    L'utente inserisce in una textbox il nuovo prezzo di un prodotto.
    Io, all'atto del clic del pulsante Aggiorna, faccio una verifica sul database per
    verificare che quel prezzo superi o meno il massimo prezzo mai raggiunto da quel prodotto.

    A questo punto dovrei mostrargli un pop-up con la scritta:

    Il prezzo che hai inserito (inserire il prezzo) supera il prezzo mai raggiunto per questo prodotto (inserire il valore).
    Confermi la scelta?

    Sì - No

    Se Sì si procede con l'aggiornamento del nuovo prezzo. Se No tutto termina lì.

    Magari, ma non è essenziale, sarebbe bello che quando appare il pop-up mi si "congeli" la pagina aspx sottostante,
    in modo da obbligare a rispondere al pop-up stesso.

    Qualcuno ha idea di come fare?

    Grazie in anticipo.

    Luigi

Todas as Respostas

  • sexta-feira, 25 de maio de 2012 07:23
    Usuário que responde
     
     Respondido

    Avevi già fatto una domanda simile in questo post: http://social.msdn.microsoft.com/Forums/it-IT/aspnetit/thread/80fd1a70-369b-4408-84da-a003cb840b71.

    L'unica differenza è che, questa volta, invece di avere un solo bottone nel popup, che chiude la finestra, dovrai gestire le due scelte, usando gli opportuni handler (se l'utente preme , esegui l'aggiornamento, altrimenti con No chiudi il popup).


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • sexta-feira, 25 de maio de 2012 07:42
     
     

    Beh qua mi sembra leggermente diverso, dato che il popup dovrebbe agire prima del salvataggio del dato. Cmq provo a vedere se è fattibile con il ModalPopupExtender.

    Luigi

  • sexta-feira, 25 de maio de 2012 07:53
    Usuário que responde
     
     
    Ovviamente il contesto non può essere esattamente uguale, ma, se hai capito bene il discorso che abbiamo affrontato nel thread che ti ho indicato, non dovresti avere problemi ad applicare quei concetti anche in questa nuova situazione.

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • sexta-feira, 25 de maio de 2012 19:01
     
      Contém Código

    Stavo provando a fare delle prove con il ModalPopupExtender in modo da simulare il più possibile la mia situazione reale.
    In VS 2010 mi sono creato una vuota WebApplication con una sola pagina il cui HTML è questo:

    <body> <form id="form1" runat="server"> <div> <asp:ToolkitScriptManager runat="server" /> Set the new price of the product ID=123<br /> <br /> <asp:TextBox ID="txtNewPrice" runat="server"></asp:TextBox> <br /> <br /> <br /> <asp:Button ID="btnUpdate" runat="server" Text="Update" onclick="btnUpdate_Click" /> <br /> <br /> <br /> <br /> <asp:Panel ID="Panel1" runat="server" BorderStyle="Double" BorderColor="Red" Width="400px"> <asp:Label ID="lblMessage" runat="server"></asp:Label> <br /> <asp:Button ID="btnOK" runat="server" Text="OK" onclick="btnOK_Click" /> <asp:Button ID="btnCancel" runat="server" Text="Cancel" /> <br /> </asp:Panel> <asp:ModalPopupExtender TargetControlID="btnUpdate" PopupControlID="Panel1" ID="ModalPopupExtender1" OkControlID="btnOK" CancelControlID="btnCancel" DropShadow="True" runat="server"> </asp:ModalPopupExtender>

    <asp:Label ID="lblNewPrice" runat="server"></asp:Label>

    </div> </form> </body>


    L'utente inserisce il nuovo prezzo per il prodotto in questione. Al clic del pulsante Update,
    recupero dal database il massimo prezzo che questo prodotto ha mai avuto nel passato, e se lo supera
    dovrei mostrare il popup di avvertimento, lasciano all'utente la facoltà di inserirlo o di ripensarci.

    Questo è il code behind - in cui per ora ho cablato il prezzo massimo, ma nella realtà ci sarà un metodo che
    interroga il database.

    protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void btnUpdate_Click(object sender, EventArgs e)
            {
                int ProductID = 123;
                decimal NewPrice = Convert.ToDecimal(txtNewPrice.Text);
                decimal MaxPrice = GetMaxPriceFromDB(ProductID);
    
                if (NewPrice > MaxPrice)
                {
                    lblMessage.Text = string.Format("Attention: Are you sure to insert a price - {0} - that this product has never had (Max={1})?", NewPrice, MaxPrice);
                }
    
            }
    
    
            private decimal GetMaxPriceFromDB(int ProductID)
            {
                decimal MaxPrice;
                // Execute stored procedure to get max price for Product ID = ProductID
                return 190m; // For example
            }
    
            protected void btnOK_Click(object sender, EventArgs e)
            {
                // Update in the database
                lblNewPrice.Text = txtNewPrice.Text;
    
            }

    Pur tuttavia nulla succede. Soprattutto non appare la scritta di avvertimento nel popup.
    Ed eseguendolo in debug, infatti, nemmeno entra nell'evento del metodo bntUpdate_Click, e quindi per forza non setta la scritta.

    In cosa sbaglio?




    • Editado Ciupaz sexta-feira, 25 de maio de 2012 19:04
    • Editado Ciupaz sexta-feira, 25 de maio de 2012 19:05
    • Editado Ciupaz sexta-feira, 25 de maio de 2012 19:06
    •  
  • sexta-feira, 25 de maio de 2012 19:18
    Usuário que responde
     
     

    Nel tuo codice ci sono diversi errori.

    Innanzi tutto, poiché vuoi far apparire il popup solo dopo aver effettuato il controllo sul database, non puoi usare la proprietà TargetControlID del ModalPopupExtender, perché in questo modo il popup viene sempre visualizzato alla pressione del pulsante. D'altra parte, così facendo, l'evento Click del pulsante non viene generato, perché viene gestito dall'AJAX Control Toolkit.

    Devi quindi eliminare il valore btnUpdate dalla proprietà TargetControlID. Così facendo, per visualizzare effettivamente il popup, devi richiamare il suo metodo Show.

    Perdonami se insisto, ma questi problemi (ovvero visualizzazione di un popup dopo un'elaborazione lato server), li avevamo già affrontati nel post che ti ho segnalato in precedenza: anche in questo caso, infatti, devi eseguire un'operazione sul server (nell'altro post era un salvataggio, in questo devi solo fare un controllo).

    Ti esorto quindi a rileggere il post in questione, perché se in tale occasione sei riuscito a far funzionare il tutto, dovresti farcela anche in questo caso, si tratta solo di riapplicare gli stessi ragionamenti.

    L'unica differenza, è che in questo caso nel ModalPopupExtender avrai due pulsanti, e premendo OK devi eseguire un'altra elaborazione, quindi hai bisogno di un gestore per l'evento btnOK_Click, come vedo hai già dichiarato. Perché questo funzioni, però, devi togliere la proprietà OkControlID dalla dichiarazione dell'extender, perché altrimenti la pressione del pulsante ne causerebbe la chiusura automatica, senza eseguire il codice dell'evento Click. Per chiudere effettivamente il popup, dopo il salvataggio, devi richiamare il metodo Hide dell'extender.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • domingo, 17 de junho de 2012 19:03
    Usuário que responde
     
     

    Ciao!

    Hai seguito i suggerimenti che ti ho dato? Ti hanno aiutato a risolvere il problema?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

  • segunda-feira, 18 de junho de 2012 13:25
     
     

    Sì scusa per non aver posto subito il feedback. Alla fine ho ripercorso la strada che mi avevi indicato nell'altro post.

    Grazie ancora.

    Luigi