2009-07-26 79 views
7

我有一个div这样:维护后网页提交(ASP.NET)的股利滚动位置

<div style="overflow-y: scroll; height: 260px"> 

我包含了几百个记录,并让我选择一个项目来填充它下面的FormView控件。

问题是当页面回发时,滚动条的位置会回到div的顶部。我想尝试并保持其位置,以便所选记录仍可见。

任何想法?

回答

7

地方是这样的:

<asp:HiddenField id="hdnScrollPos" runat="server"/> in your aspx. 

然后,一些JavaScript这样的:

var hdnScroll = document.getElementById(<%=hdnScrollPos.ClientID%>); 
var bigDiv = document.getElementById('bigDiv'); 
bigDiv.onscroll = function() { 
    hdnScroll.value = bigDiv.scrollTop; 
} 

window.onload = function() { 
    bigDiv.scrollTop = hdnScroll.value; 
} 
1

免责声明 - 不是我的代码,但我已经看到了这个使用前:

window.onload = function(){ 
    var strCook = document.cookie; 
    if(strCook.indexOf("!~")!=0){ 
     var intS = strCook.indexOf("!~"); 
     var intE = strCook.indexOf("~!"); 
     var strPos = strCook.substring(intS+2,intE); 

     document.getElementById("divTest").scrollTop = strPos; 
     document.getElementById("divTest").scrollTop = strPos; 
    } 
    } 
    function SetDivPosition(){ 
    var intY = document.getElementById("divTest").scrollTop; 

    document.cookie = "yPos=!~" + intY + "~!"; 
    } 

的想法是滚动条的位置存储在cookie中。另一个(更好的?)选项将存储在一个隐藏的字段(或字段)中。希望让你去...

+0

我测试过但不工作 – telebog 2011-03-18 09:19:53

0

ASP.NET有这个内置的所有你需要做的是在你的页面指令中包含MaintainScrollPositionOnPostback。

<%@ Page Language="C#" MaintainScrollPositionOnPostback="true" %> 
+0

我怀疑这是否适用于嵌入式div,只是一般的主页。 – FlySwat 2009-07-26 13:52:03

+0

是的,我不确定这将适用于页面中包含的DIV。虽然我没有尝试过。 – 2009-07-26 13:52:53

0

更换thebodydocument.getElementById("divTest")

如果您担心onscroll事件不工作,歌剧/ ff,你可以尝试改变

thebody.onscroll=SaveScrollLocation; 

setInterval('SaveScrollLocation()", 500); 
3

下面是使用JQuery这工作对我来说FlySwat的解决方案的更细化的方式:

var $ScrollPosition = $('#hfScrollPosition'); 
    var $ScrollingDiv = $('#pnlGroupDataContent'); 
    if ($ScrollPosition.length && $ScrollingDiv.length) { 
     // Store scrolling value 
     $ScrollingDiv.scroll(function() { 
      $ScrollPosition.val($ScrollingDiv.scrollTop()); 
     }); 
     // Set scrolling 
     $ScrollingDiv.scrollTop($ScrollPosition.val()); 
    }