Egy UpdatePanelben lévő divben jelenítetek meg egy GridView-t. A div mérete fix, így mikor a gridnek túl sok sora van a div scrollozható. A grid egy AJAX timer eseménykezelőjében UpdatePanel.Update()-tel frissül. Ez a frissülés viszont mindig visszapozicionálta az elejére a div scrollbarját, ami rendkívül idegesítő.
Végül így sikerült megoldanom:
<script type="text/javascript">
var scrollPosition
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler)
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler)
function BeginRequestHandler(sender, args)
{
var element = document.getElementById('a_scrollbaros_div')
var element = $get('a_scrollbaros_div')
scrollPosition = element.scrollTop
}
function EndRequestHandler(sender, args)
{
var element = document.getElementById('a_scrollbaros_div')
var element = $get('a_scrollbaros_div')
element.scrollTop = scrollPosition
}
</script>
Szépen feliratkoztam minden kérésre és válaszra. A kérésnél kimentem a scrollbar tetejének pozicióját, válasznál pedig visszaállítom. Úgy tűnik működik IE 6,7 és Firefox 2.0 alól is.