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

  一般来说很多的人在控制浏览器滚动条都是用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可以写成一个,仅供参考。