2009-07-26 23 views
7

Ho un div in quanto tale:Mantenere la posizione scroller sulla Div dopo pagina postback (ASP.NET)

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

I contiene alcune centinaia di dischi e mi permette di selezionare un elemento per popolare un controllo formview di sotto di essa .

Il problema è che quando la pagina post-back, la posizione dello scroller torna all'inizio del div. Voglio provare a mantenere la sua posizione in modo che il record selezionato sia ancora visibile.

Qualche idea?

risposta

7

Luogo qualcosa di simile:

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

Poi, alcuni javascript come:

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; 
} 
+0

Ho trovato necessario avere 'var hdnScroll = document.getElementById ('hdnScrollPos'); 'piuttosto che quello mostrato, ma grazie lo stesso. –

+0

asp asp: HiddenField – Trikaldarshi

1

di responsabilità - non il mio codice, ma ho visto questo usato prima:

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 + "~!"; 
    } 

L'idea è quella di memorizzare la posizione della barra di scorrimento in un cookie. Un'altra opzione (migliore?) Sarebbe quella di archiviarla in un campo (o campo) nascosto. Spero di farti andare ...

+0

Ho provato e non lavoro – telebog

0

ASP.NET ha tutto ciò che devi fare è includere MaintainScrollPositionOnPostback nella tua direttiva di pagina.

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

Dubito che funzioni su div incorporate, solo la pagina principale in generale. – FlySwat

+0

Sì, non sono sicuro che funzionerà su DIV contenuti nella pagina. Anche se non l'ho provato. –

+0

Lol non ho letto la domanda correttamente, scusa gente –

0

Sostituire thebody con document.getElementById("divTest")

Se ti preoccupi che l'evento onscroll non funziona in opera/ff, puoi provare a cambiare

thebody.onscroll=SaveScrollLocation; 

a

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

Ecco un modo più raffinato della soluzione di FlySwat utilizzando jQuery, che ha lavorato per me:

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()); 
    } 
Problemi correlati