Around and About .NET World

Il blog di Marco Minerva
posts - 1671, comments - 2232, trackbacks - 2135

My Links

News

Contattami su Live Messenger:


MCTS: Windows, Web, Distributed Applications & SQL Server

MCPD: Enterprise Applications

Tag Cloud

Archives

Post Categories

Links

Mantenere la posizione di un Panel all'interno di un UpdatePanel

Supponiamo di avere un UpdatePanel al cui interno abbiamo inserito un controllo Panel, impostando la sua proprietà ScrollBars su Auto, in modo da visualizzare automaticamente le barre di scorrimento nel caso in cui gli oggetti che contiene non siano completamenti visibili. Se uno di questi ultimi determina un PostBack, l'UpdatePanel ci garantisce che sono il pannello sarà aggiornato. La posizione delle barre di scorrimento, tuttavia, non sarà mantenuta, quindi il controllo "resetterà" le sue coordinate di visualizzazione, mostrando inesorabilmente l'angolo in alto a sinistra.

Per risolvere il problema, si deve utilizzare un piccolo "trucco" basato su Javascript:

1 <script type="text/javascript"> 2 var xPos, yPos; 3 var prm = Sys.WebForms.PageRequestManager.getInstance(); 4 prm.add_beginRequest(BeginRequestHandler); 5 prm.add_endRequest(EndRequestHandler); 6 function BeginRequestHandler(sender, args) { 7 var panel = $get('<%= pnlCategorie.ClientID %>'); 8 if (panel != null) { 9 xPos = panel.scrollLeft; 10 yPos = panel.scrollTop; 11 } 12 } 13 function EndRequestHandler(sender, args) { 14 var panel = $get('<%= pnlCategorie.ClientID %>'); 15 if (panel != null) { 16 panel.scrollLeft = xPos; 17 panel.scrollTop = yPos; 18 } 19 } 20 </script>

La funzione BeginRequestHandler (righe 6-12) viene invocata prima che la chiamata asincrona sia effettivamente eseguita. In essa recuperiamo la posizione delle barre del panello che ci interessa, posizione che ripristiniamo nella funzione EndRequestHandler (right 13-19), che è invocata al termine della procedura asincrona. In questo esempio, utilizziamo un Panel di nome pnlCategorie (riga 7 e 14); è semplice modificare le routine in modo che mantengano la posizione di più pannelli.

L'unica accortezza che si deve avere è inserire questo codice dopo la creazione dello ScriptManager di ASP .NET AJAX (quindi, ad esempio, alla fine della pagina ASPX contenente i pannelli).

Technorati Tags: , , ,

Print | posted on martedì 21 ottobre 2008 01:58 | Filed Under [ ASP .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET