Asp.net保持页面滚动条位置(页面提交后不变)

时间:2021-11-26 17:28:30

一般来说很多的人在控制浏览器滚动条都是用Page.SmartNavigation = False,对于页面中DIV等等的滚动条控制,我在看了别人代码后,写了一个,仅供参考: 

复制代码代码如下:


Public Shared Sub SaveDivScrollPosition(ByVal divIDArray As String, ByVal objPage As Page) 
Dim saveScrollPosition As String 
Dim i As Integer 
Dim divID() As String 
divID = divIDArray.Split(",") 
For i = 0 To divID.Length - 1 
objPage.RegisterHiddenField(divID(i) & "__SCROLLPOS", objPage.Request.Form(divID(i) & "__SCROLLPOS")) 
saveScrollPosition = "<script language='javascript'>" _ 
& "function saveScrollPosition() {" _ 
& " if (document.all['" & divID(i) & "'] != undefined) {" _ 
& "document.forms[0]." & divID(i) & "__SCROLLPOS.value = " _ 
& "document.all['" & divID(i) & "'].scrollTop + ',' " _ 
& " + document.all['" & divID(i) & "'].scrollLeft;}}" _ 
& "if (document.all['" & divID(i) & "'] != undefined) {document.all['" & divID(i) & "'].onscroll=saveScrollPosition;}" _ 
& "</script>" 
objPage.RegisterStartupScript("saveScroll" & divID(i), saveScrollPosition) 
Next 
End Sub 

 

复制代码代码如下:


Public Shared Sub RestoreDivScrollPosition(ByVal divIDArray As String, ByVal objPage As Page) 
Dim restoreScrollPosition As String 
Dim setPositionFunction As String 
Dim i As Integer 
Dim divID() As String 
divID = divIDArray.Split(",") 
For i = 0 To divID.Length - 1 
setPositionFunction = setPositionFunction & "SetScrollPosition('" & divID(i) & "');" 
Next 
restoreScrollPosition = "<script language='javascript'>" _ 
& setPositionFunction _ 
& "</script>" 
objPage.RegisterStartupScript("restoreScroll", restoreScrollPosition) 
End Sub 


JAVASCRIPT: 

复制代码代码如下:


function SetScrollPosition(divID){ 
var e; 
var a; 
var obj; 
if (document.getElementById(divID)){ 
obj = eval('document.forms[0].' + divID + '__SCROLLPOS'); 
if (obj) { 
e=eval('document.forms[0].' + divID + '__SCROLLPOS').value; 
a=e.split(','); 
document.getElementById(divID).scrollTop= a[0]; 
document.getElementById(divID).scrollLeft= a[1]; 



在页面后台调用的时候,写下如下的代码: 

复制代码代码如下:


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
call SaveDivScrollPosition("div1,div2,div3",me) 
call RestoreDivScrollPosition("div1,div2,div3",me) 
End Sub 


不好意思,这两个SUB可以写成一个,仅供参考。