32 messaggi dal 05 febbraio 2013
Buongiorno,

In una gridview ho attivo il command button delete e ho aggiunto il seguente codice per far apparire una confirmbox prima di procedere con la cancellazione della riga selezionata.Pero' vorrei customizzare il layout della confirm box. Come posso fare? grazie
  protected void grdDati_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // loop all data rows
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // check all cells in one row
                    foreach (Control control in cell.Controls)
                    {
                                                LinkButton button = control as LinkButton;
                        if (button != null && button.CommandName == "Delete")
                            // Add delete confirmation
                            button.OnClientClick = "return confirm('Il dato selezionato verrà cancellato " +
                                   "Continuare?');";
                    }
                }
            }
        }
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
l'aspetto della finestra legata alla funzione confirm non può essere personalizzato, e quindi dovrai farne a meno e realizzare una tua soluzione completamente custom.

Il problema è che rinunciare al confirm ti complica parecchio la vita, infatti ha una caratteristica che non può essere replicata in una soluzione custom: la sua sincronicità.

Vedi, quando clicchi il tuo bottone "Delete", si va ad innescare il postback della pagina ma, subito prima che ciò avvenga, la funzione confirm causa l'interruzione del flusso di esecuzione del javascript e chiede all'utente di esprimere la sua conferma. L'esecuzione riprendere solo dopo che l'utente ha cliccato il bottone OK o il bottone Annulla. In quel frangente, la finestra di conferma è l'unico elemento con cui l'utente può interagire (è una finestra modale).

Per avere un'esperienza simile con codice completamente custom bisogna ingegnarsi un po'. Ecco un'ipotesi di workflow:
  • All'OnClientClick, la funzione javascript verificherà se sul bottone è stato posto uno speciale attributo. Alla prima pressione del bottone, tale attributo non verrà trovato e questa sarà l'indicazione per aprire la finestra di conferma e per bloccare immediatamente il postback, che altrimenti si verificherebbe.
  • All'utente si mostrerà la finestra di conferma. Puoi realizzarla con uno dei plugin di jQuery elencati qui. https://plugins.jquery.com/tag/modal/
  • Alla pressione del tasto "Ok" sulla modale, chiudila e imposta l'attributo sul bottone. Immediatamente, simulane il click col javascript.
  • La funzione legata all'OnClientClick andrà in esecuzione di nuovo. Questa volta, dato che l'attributo era stato posto sul bottone, il postback potrà fare il suo corso senza che sia mostrata alcuna finestra di conferma.


Giusto per dimostrare il concetto, lo puoi vedere all'opera in questo fiddle.
https://jsfiddle.net/LgbLy2uz/
Se volessi provare ad usarlo col tuo bottone di eliminazione, dovresti scrivere:
button.OnClientClick = "return chiediConferma(this)";


..ma ti consiglio di trovare qualche plugin di jQuery che faccia la stessa cosa, e in maniera più affidabile. Vedi per esempio questo plugin (che richiede anche jQueryUI per la modale).
http://www.projectshadowlight.org/jquery-easy-confirm-dialog/

ciao,
Moreno
Modificato da BrightSoul il 01 maggio 2015 14.46 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.