Come eseguire finestre di dialogo modali per la visualizzazione di dat...

venerdì 21 novembre 2008 - 12.37

Leonida Profilo | Junior Member

Ciao a tutti, sono sempre io con un nuovo quesito, ma che devo dirvi, sto capendo più cose e più in fretta qui che cercando all'impazzata in rete. Vorrei usare una finestra di dialogo modale personalizzata per due scopi:-

1. Visualizzare messaggi di errore dettagliati sollevati dalla parte di codice per la gestione di un DB. Per esempio, se un utente si registra tramite form ed è già registrato (univocità di chiave), deve comparire all'utente un messaggio in una nuova finestra di dialogo che lo informi della presenza dei suoi dati nel DB. L'utente deve poter solo chiudere la finestra cliccando su un tasto OK o simile.

2. Visualizzare delle informazioni nella finestra di dialogo. Per esempio vorrei che un utente dopo la compilazione del form, in seguito alla pressione del tasto di conferma, possa visualizzare i dati inseriti nella finestra di dialogo e registrati nel database. Anche in questo caso deve poter interagire con la finestra unicamente tramite il tast Ok per chiuderla.

Come sempre sto lavorando in ASP.NET e C# con Visual studio 2005. Se possibile vorrei evitare l'utilizzo di javascript, se non è possibile fa niente. Chiaramente non pretendo che qualcuno mi scriva il codice, ma se lameno potesse suggerirmi qualche Classe specifica da studiare o indirizzarmi in questo senso...

Grazie a tutti

balfaz Profilo | Expert

tra le diverse maniere che ci sono puoi usare:
- ModalPopup Ajax, ma .... e un po macchinoso e anche complesso se stai appena iniziando (se non fosse cosi potresti provare)
- Alert in javascript usando per il primo caso la seguente istruzione dopo aver evaluato il login / password (occhio il codice è in vb)
Dim strMsg As String = "<script>" & _
"alert('User/password non esiste, verifica.');" & _
"</script>"
ClientScript.RegisterClientScriptBlock(Me.GetType(), "non_log", strMsg) includo anche un link illustrativo di questo commando http://msdn.microsoft.com/it-it/library/system.web.ui.page.registerclientscriptblock(VS.80).aspx

invece per il secondo puoi usare il OnClientClick del pulsante per inserire questa funzioncina in js per farti vedere i dati dentro un alert

spero ti serva, buona fortuna....lo sai siamo sempre qui , e ricorda che tutti in qualche momento abbiamo avuto un po di paura o rabbia verso Javascript ma purtroppo "per dire purtroppo" è molto utile in tante situazioni e quando riesci a digerirle vedrai che non puoi farne a meno, ti parlo come si stai iniziando in questo ma se non fosse cosi lo saprai meglio di me.

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

Leonida Profilo | Junior Member

Mmmh, ok grazie, in realtà sto iniziando ora, quindi ogni consiglio è più che ben accetto. Sto già facendo qualche tentativo con alert, vediamo come va...uff

balfaz Profilo | Expert

con il alert puoi fare in questa maniera in c#

StrScript = "<script>alert('errore login'); '"
StrScript += "</" + "script>"
ClientScript.RegisterClientScriptBlock(Me.GetType(), "non_log", strMsg)

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

Leonida Profilo | Junior Member

>con il alert puoi fare in questa maniera in c#

>StrScript = "<script>alert('errore login'); '"
>StrScript += "</" + "script>"
>ClientScript.RegisterClientScriptBlock(Me.GetType(), "non_log", strMsg)

Ok fatto, ho inserito il mio codice in un catch in corrispondenza dell'evento Button_click nel file aspx.cs. In pratica il catch è in corrispondenza di un errore sul DB e in teoria dovrebbe mostrarmi una finestra di dialogo con la stampa dell'errore, ma non funziona!!!Potresti dirmi dove sbaglio!? Premetto che nella pagina .aspx non ho aggiunto niente:-

catch (SqlException ex)
{
string error = ex.ToString();

// Form the script that is to be registered at client side.
String scriptString = "<script language=\"JavaScript\">";
scriptString += "alert(\"Errore\");}<";
scriptString += "/";
scriptString += "script>";

//RegisterClientScriptBlock("clientScript", scriptString);
ClientScript.RegisterClientScriptBlock(this.GetType(), "erroreSql", scriptString);
}

Mi manca un pezzo mi sa...

balfaz Profilo | Expert

hai un errore in questa riga
scriptString += "alert(\"Errore\");}<"; <-----togli la graffa
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

balfaz Profilo | Expert

poi perché usi il try-catch per verificare s'è giusto o no il login? non sarebbe più conveniente controllare se il tuo source di dati e tornato vuoto

ricorda che il try-catch ti serve per fare eventuali procedure di fronte a gli errore o eccezioni, cioè, quello che voglio dirti è che si per caso non hai una connessione a DB attiva o funzionante, o la tua query non è corretta sempre se ne andrà per questa via, non è conveniente e devo aggiungere che come struttura condizionale è pesante (cosa di millisecondi ma approfitto per fartelo sapere)

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

Leonida Profilo | Junior Member

Hai ragione, la stanchezza comincia a farsi sentire eheh...ora però mi da un altro problema, in pratica mostra il messaggio di errore in una nuova finestra ma non carica la pagina finquando non clicco sul tasto di conferma della finestra di errore ... è una prerogativa dell'allert?

Se è così stavo pensado a questo punto di costruire una finestra ex novo passando i dovuti parametri, in modo da stampare anche quaclosa di più complesso che una stringa di errore o conferma...e con questo quesito per oggi stacco, sono fuso...grazie per l'aiuto

balfaz Profilo | Expert

purtroppo si!!!, quando lo fai in questa maniera perché praticamente questo script viene registrato nella pagina e nel client dopo il postback, se questa stessa procedura fosse fatta come una function java dentro la pagina come si deve questo no accadrebbe (non potresti neanche valutare il risultato del suo log-in), una maniera sarebbe fare un callback ma è tutta un'altra procedura, un po più lunga. Poi ricordate che purtroppo PER ADESSO il codice lato cliente e lato server sono come olio ed acqua, non possono andare assieme
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

balfaz Profilo | Expert

potresti però usare anche lo stesso metodo
ClientScript.RegisterStartupScript (this.GetType(), "erroreSql", scriptString); il quale si esegue dopo il rendering della pagina invece
il RegisterClientScriptBlock si registra prima del rendering della pagina. provaci e qualcosa fammi sapere
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."
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