解决ASP.NET回传后div滚动条位置复位的问题(利用隐藏控件原理)

  首先是为DIV添加一个onscroll="javascript:setScollTop()" 的方法(当然不一定是DIV其他的标签思路应该也是这样的)

  

复制代码 代码如下:

  <div style="overflow: auto; height: 152px" align="left" id="dvScoll_1"   onscroll="javascript:setScollTop()">

  www.glzy8.com

  ......

  </div>

  这里setScrollTop方法就是每次滚动条滚动的时候,把div的ScrollTop的值赋给一个隐藏控件。代码如下

  

复制代码 代码如下:

  function setScollTop()

  {

  document.getElementById("<%=hidScrollTop.ClientID%>").value=document.getElementById("dvScoll_1").scrollTop;

  }

  因为每次.net回发滚动条都会复位,所以这里我们 在Page_Load中给DIV的ScrollTop重新赋值了。代码如下

  

复制代码 代码如下:

  if (!IsPostBack)

  {

  。。。。。

  }

  else

  {

  //恢复滚动条位置

  if (this.hidScrollTop.Value!="")

  {

  string scrollTop = this.hidScrollTop.Value;

  string strScript="document.getElementById('dvScoll_1').scrollTop="+scrollTop;

  RegisterScriptBlock(this.Page, strScript);

  }

  }

  这里的RegisterScriptBlock是我写的一个方法,放在公共类库里的,如下所示。

  

复制代码 代码如下:

  /// <summary>

  /// 注册脚本块

  /// </summary>

  public static void RegisterScriptBlock(System.Web.UI.Page page, string _ScriptString)

  {

  page.ClientScript.RegisterStartupScript(page.GetType(), "scriptblock", "<script type='text/javascript'>" + _ScriptString + "</script>");

  }