OnBeforeUnload e PostBack

martedì 02 febbraio 2010 - 09.32

paquito_ita Profilo | Senior Member

Ciao,
dalla mia applicazione web [ASP.NET/C#], apro in una nuova pagina del browser (tramite javascript window.open) un grafico fornito da un partner esterno.
Piu' nel dettaglio invoco un REST web service che, aperto nella nuova pagina, visualizza una Mind Map. L'utente puo' apportarvi delle modifiche e, una volta chiusa la pagina, il file viene automaticamente salvato sul server del partner che fornisce il servizio.

A questo punto (tramite un'altra API) posso ottenere la descrizione delle modifiche fatte. Il problema e' che tale API andrebbe invocata quando la pagina è chiusa (in modo da ottenere una descrizione consistente).

Come potrei quindi implementare un meccanismo che, quando la pagina viene chiusa dall'utente, la mia API (lato server) viene invocata per ottenere le modifiche fatte?

Grazie in anticipo

tonyexpo Profilo | Senior Member

Ciao

benchè sia possibile intercettare il Closing del browser da javascript, non te lo consiglio perchè potrebbe accadere che l'evento non venga invocato correttamente o che l'utente abbia disabilitato i javascript.....

Ti consiglio di lavorare sulla base delle azioni dell'utente..... quindi, o metti un semplice pulsante del tipo "Salva dati" oppure dovresti salvarti lato server tutte le informazioni necessarie ed intercettare la chiusura della sessione (nel global asax) e utilizzare quell'evento lato server... .ma anche questo approccio se utilizzato con una sessione non in memoria non funzionerebbe, se ad esempio hai un ASPState su SQL Server perchè hai una batteria di n server......

Riassumendo, la scelta più semplice e più efficace sarebbe il pulsante "Salva"


tienici informati
ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

paquito_ita Profilo | Senior Member

Ciao,

rianalizzando il problema anche io ero propenso per un button che permettesse di salvare le modifiche (anche parziali) sul nostro DB. Usare la sessione non penso funzionerebbe, in quanto la nuova pagina che viene aperta (che a seconda delle impostazioni del browser potrebbe essere una nuova tab) visualizza l'output prodotto da un servizio esterno, quindi non associato con la nostra applicazione.

Grazie per il consiglio, credo proprio procedero con un button e creando un thread che regolarmente, ad esempio alle 2 di notte, esegue un look up e salva i dati relativi alle mind map non "aggiornate" sul nostro DB, previo settaggio di un flag.
Considero il seguente scenario:

1) Click sul button "Open Map" -> imposto flag "isUpdated" a FALSE (l'utente modifica la mappa)
2) Click sul button "Apply changes" -> resetto il flag e imposto a TRUE (in tal modo la routine non deve considerare tale dato)

Se un utente clicca sul button "Apply changes" mentre un altro utente sta ancora editando la mappa, allora NON resetto il flag.
Avresti eventuali consigli per migliorare il processo?

Grazie
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5