Page.ClientScript.RegisterScriptBlock che non si vede

mercoledì 01 ottobre 2008 - 09.28

Simpz Profilo | Junior Member

Ciao a tutti,
sto usando questo controllo per far vedere un javascript su una pagina ma il javascript non si vede e l'esecuzione continua.
É come se facesse troppo in fretta il codice per fare il javascript... come posso fare a farlo vedere?

Grazie a tutti

Simone

rossimarko Profilo | Guru

Ciao,

cosa dovrebbe fare il tuo script? Perchè dovrebbe bloccare la pagina?

Hai verificato se viene eseguito? Eventualmente puoi inserire un alert per controllare..

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

Simpz Profilo | Junior Member

Praticamente è una eleminazione di una riga di una gridview, faccio un controllo su una condizione e se quella condizione fallisce entra in un if dove all'inizio faccio il page.clientscript.registereccecc... che mi aspetto che faccia la funzione javascript e quindi venga un alert fuori (ma non viene) e poi ritorna semplicemente... ecco il codice
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

rossimarko Profilo | Guru

Ciao,

prova a guardare se nell'html della pagina viene riportato lo script che hai registrato..

Considera inoltre che quando richiami il metodo RegisterClientScriptBlock l'esecuzione della pagina non si ferma, ma semplicemente inserisce nell'output della pagina il tuo script.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

mmm, allora come posso generare questo javascript da c#?

Edit...
ora che ci sto pensando a me non serve registrare il javascript ma solo ed esclusivamente farlo vedere, quindi volendo lo posso includere in un file .js e poi richiamarlo alla bisogna...

rossimarko Profilo | Guru

Per generarlo va benissimo usare i metodi del ClientScriptManager. Questo ad esempio registra lo script di startup (http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx).

Questo è un esempio di come registrare un alert:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Hai controllato se lo script delll'alert viene inserito nella pagina html?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

Dopo il page.clientscript.registerclientscriptblock faccio un
page.clientscript.isregisterclientscriptblock per vedere cosa mi ritorna, e mi ritorna sempre false... come mai???

rossimarko Profilo | Guru

Di solito si usa per non registrare due volte lo stesso script..

Come riportato nell'esempio:

// Check to see if the client script is already registered. if (!cs.IsClientScriptBlockRegistered(cstype, csname2)) { StringBuilder cstext2 = new StringBuilder(); cstext2.Append("<script type=\"text/javascript\"> function DoClick() {"); cstext2.Append("Form1.Message.value='Text from client script.'} </"); cstext2.Append("script>"); cs.RegisterClientScriptBlock(cstype, csname2, cstext2.ToString()); }

Hai provato ad inserire la riga di codice che ti ho riportato come esempio? Ho fatto una prova inserendola in un pulsante su una pagina e funziona correttamente. L'alert viene visualizzato
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

Si ho provato ma il punto è che l'alert javascript non mi deve essere scatenato sul click di un bottone ma bensì su una if di c# se non va a buon fine... come potrei fare?

rossimarko Profilo | Guru

>Si ho provato ma il punto è che l'alert javascript non mi deve
>essere scatenato sul click di un bottone ma bensì su una if di
>c# se non va a buon fine... come potrei fare?

Non cambia nulla.. Nel momento che viene ricaricata la pagina nel browser comparirà l'alert javascript (questo ovviamente se è stato registrato correttamente). L'interruzione non può avvenire subito nel momento in cui registri il javascript perchè non si tratta di un'applicazione windows e quindi non c'è controllo diretto sull'interfaccia, ma sono post tra browser e webserver.

Provo a postare un esempio con una griglia per farti capire meglio.

Nella mia pagina ho creato una griglia molto semplice:

<asp:DataGrid ID="grid" runat="server" AutoGenerateColumns="false"> <Columns> <asp:BoundColumn DataField="IDUtente" HeaderText="ID" /> <asp:BoundColumn DataField="Cognome" HeaderText="Cognome" /> <asp:ButtonColumn CommandName="operazione" Text="Elimina" /> </Columns> </asp:DataGrid>

in cui ho inserito una ButtonColumn che mi esegue un'operazione. Nel codice della pagina ho intercettato l'evento ItemCommand:

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

All'interno del command puoi fare tutte le operazioni che ti servono e poi se non vanno a buon fine registri lo script dell'alert. Una volta terminata l'esecuzione del codice nel tuo browser ti troverai la popup javascript.

Se ti serve qualcosa di più specifico per il tuo caso postaci il codice che ci guardiamo, oppure indicaci quale evento stai intercettando..

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

Simpz Profilo | Junior Member

Intanto ti ringrazio per tutto l'aiuto che mi hai dato, ma siccome dovevo fare una cosa molto veloce ho optato per una soluzione che tocca una label di errore e la fa vedere o non vedere a seconda dell'if.
Ho notato poi che questa pagina fa una postback con asp.net ajax quindi penso che dovrei gestire la registrazione dell'evento in un certo modo... appena mi rimetterò comunque cercherò di usare i tuoi consigli.
Grazie mille!
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