Perdita Stile dopo refresh, perchè???

lunedì 06 ottobre 2008 - 13.08

stuzzo Profilo | Junior Member

Ciao a tutti,
sto combattendo con un insolito problema....Ho notato che la mia applicazione ha un piccolo problemino...al verificarsi di un errore o di un alert, la pagina perde le informazioni di stile, soprattuto la grandezza del carattere, il colore....
Scusate ma questo da cosa è dovuto?

ciao
Alfredo

rossimarko Profilo | Guru

Ciao,

riesci a darci qualche informazione in più su come è fatta? L'errore è il classico errore di asp.net visualizzato in caso di errore non gestito oppure è una tua pagina fatta ad hoc? L'alert viene fatto con un javascript?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Ciao,

Ciao

>riesci a darci qualche informazione in più su come è fatta? L'errore
>è il classico errore di asp.net visualizzato in caso di errore
>non gestito oppure è una tua pagina fatta ad hoc? L'alert viene
>fatto con un javascript?

Allora l'alert è fatto così: Response.Write("<script>alert('errore');</script>");
Non ricevo messaggi di errori, questa cosa mi succede su più di una pagina......

rossimarko Profilo | Guru

>Allora l'alert è fatto così: Response.Write("<script>alert('errore');</script>");
>Non ricevo messaggi di errori, questa cosa mi succede su più
>di una pagina......

Allora ti consiglio innanzitutto di togliere il response.write. Per registrare un javascript puoi usare le funzioni che ti fornisce il framework, oltretutto eviti numerosi problemi che incontreresti con Ajax. In questo caso puoi sfruttare il metodo RegisterStartupScript (http://msdn.microsoft.com/it-it/library/system.web.ui.page.registerstartupscript.aspx)

Ti posto due righe d'esempio:
Dim strMessaggio As String = "alert('messaggio da visualizzare');" Page.ClientScript.RegisterStartupScript(Me.GetType(), "alertpagina", strMessaggio, True)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Ti posto due righe d'esempio:
>Dim strMessaggio As String = "alert('messaggio da visualizzare');"
>Page.ClientScript.RegisterStartupScript(Me.GetType(), "alertpagina",
>strMessaggio, True)

Hai ragione....con questo metodo risolvo il problema :) adesso colgo l'occasione per farti un'altra domanda :)
Dovrei inserire una confirm...ovviamente posso sfruttare lo stesso metodo...Ma come faccio a leggere la risposta e poi applicarla al C#?
Ti spiego:

string strMessaggio = "confirm('andare avanti?');";
Page.ClientScript.RegisterStartupScript(Page.GetType(), "alertpagina", strMessaggio, true);

adesso io dovrei implementare una cosa che mi permetta di leggere la risposta e poi eseguire codice c# in base alla risposta...come faccio? p.s. se puoi postami un esempio ;)

grazie mille!

rossimarko Profilo | Guru

>Dovrei inserire una confirm...ovviamente posso sfruttare lo stesso
>metodo...Ma come faccio a leggere la risposta e poi applicarla
>al C#?

Dipende dove vuoi inserire il messaggio di conferma.. Se ad esempio ti serve per confermare il click di un pulsante puoi inserirlo nella proprietà OnClientClick:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Se non confermi la richiesta il click del pulsante non genererà un postback lato server, viceversa se confermi l'operazione allora verrà richiamato l'evento click lato server

Diversamente la cosa si fa un po' più complicata..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member


>Se non confermi la richiesta il click del pulsante non genererà
>un postback lato server, viceversa se confermi l'operazione allora
>verrà richiamato l'evento click lato server
>
>Diversamente la cosa si fa un po' più complicata..

E mi sa che la cosa sia un po' più complicata, perchè è vero che nel mio caso il confirm viene invocato da un tasto, ma solo al verificarsi di una determinata condizione. Sono riuscito a farlo visualizzare quando dovuto, ma adesso come faccio a distinguere dal caso che sia stato cliccato "ok" o no?

if (condizione)
{
string strMessaggio = "confirm('Continuare?');";
Page.ClientScript.RegisterStartupScript(Page.GetType(), "confirmPagina", strMessaggio, true);
//adesso qua...come faccio a capire se è stato premuto ok o annulla? devo mettere un Page.IsPostBack?
}
else
{
//vai così....
}

grazie mille di tutto!

Alfredo Aiello

rossimarko Profilo | Guru

Purtroppo non puoi saperlo subito quando inserisci il codice con la funzione RegisterStartupScript. Devi crearti un javascript lato client che in base alla scelta dell'utente ti valorizza un campo hidden e poi ti genera un postback. In alternativa crei un pulsante non visibile e se l'utente risponde ok alla richiesta di conferma allora attraverso il javascript lanci il click sul pulsante creato (e in automatico lato server ti viene richiamata la funzione associata al click del pulsante)
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Purtroppo non puoi saperlo subito quando inserisci il codice
>con la funzione RegisterStartupScript. Devi crearti un javascript
>lato client che in base alla scelta dell'utente ti valorizza
>un campo hidden e poi ti genera un postback. In alternativa crei
>un pulsante non visibile e se l'utente risponde ok alla richiesta
>di conferma allora attraverso il javascript lanci il click sul
>pulsante creato (e in automatico lato server ti viene richiamata
>la funzione associata al click del pulsante)

wow mi faresti capire con qualche esempio? mi piacciono entrambi le soluzioni, anche se la seconda mi sembra oiù fine :)
grazie mille (ovviamente devo accettare il post, ma non vorrei che dopo non posso rispondere su questo post)
;)
Alfredo Aiello

rossimarko Profilo | Guru

Per la prima soluzione devi sfruttare il metodo getpostbackeventreference (http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.getpostbackeventreference.aspx) ma in questo momento non riesco a provarlo per farti un esempio.

Per la seconda ti giro un paio di righe di codice al volo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Prova a vedere se fa al caso tuo. btnConferma è il bottone che gestirà la funzione da richiamare nel caso in cui l'utente preme il pulsante ok


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

stuzzo Profilo | Junior Member

Ciao, ho quasi risolto tutto....
Adesso ho solo un problemino....ho un <asp:textbox> che deve essere abilitato solo se viene cliccata la voce altro da un ddl. Ovviamente la gestione di questi eventi la faccio via JS...sono riuscito a fare tutto, tranne nel caso in quanto si genera un postback. In quel caso il controllo che utilizzo non funziona.
if (!Page.IsPostBack)
{
string strMessaggio = "rendiInvisibile();";
Page.ClientScript.RegisterStartupScript(Page.GetType(), "confirmPagina", strMessaggio, true);
}
Attualmente è così, cioè all'inizio, quando viene caricata la pagina il campo viene reso invisibile via JS, se lo faccio via codebehind non passa proprio lato client.
Il problema è che se metto la stessa sintassi nel caso in cui la pagina sia eseguita dopo postback non funziona, anzi addirittura mi blocca anche altri controlli JS presenti nella pagina.
Come faccio a fare in modo che sia reso invisibile anche dopo postback?
Grazie :)
Alfredo Aiello

rossimarko Profilo | Guru

Ma per caso c'è un errore javascript quando avviene il postback (Se usi explorer in basso a sinistra compare un'icona di avvertimento)?

In questo caso visto che deve essere eseguito sempre puoi inserire la chiamata direttamente dentro alla pagina aspx (dopo la dichiarazione del controllo, non prima):

<script language="javascript" type="text/javascript">rendiInvisibile();</script>
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

stuzzo Profilo | Junior Member

>Ma per caso c'è un errore javascript quando avviene il postback
>(Se usi explorer in basso a sinistra compare un'icona di avvertimento)?

No, non ci sta nessun avvertimento

>In questo caso visto che deve essere eseguito sempre puoi inserire
>la chiamata direttamente dentro alla pagina aspx (dopo la dichiarazione
>del controllo, non prima):

mmm, perdona la mia ignoranza...ma se lo metti nel page load mi crea il problema sopra citato, mentre nell'aspx basta che lo metto da una qualsiasi parte dopo il controllo?
Alfredo Aiello

rossimarko Profilo | Guru

>mmm, perdona la mia ignoranza...ma se lo metti nel page load
>mi crea il problema sopra citato, mentre nell'aspx basta che
>lo metto da una qualsiasi parte dopo il controllo?

Si, ma se guardi l'html della pagina generata dovrebbe essere la stessa cosa che inserisce il framework da codice con il metodo del ClientScript. E' solo una prova per verificare se l'anomalia riscontrata rimane la stessa
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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