2009-07-26 14 views
7

tengo un div como tal:desplazador de Div tras página devolución de datos (ASP.NET)

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

I contiene unos pocos cientos de registros y me permite seleccionar un elemento para rellenar un control formview debajo de ella .

El problema es que cuando la página se devuelve, la posición del desplazamiento vuelve a la parte superior del div. Quiero intentar mantener su posición para que el registro seleccionado aún esté visible.

¿Alguna idea?

Respuesta

7

Place algo como:

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

A continuación, algunos javascript como:

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

Me pareció necesario tener 'var hdnScroll = document.getElementById ('hdnScrollPos'); 'en lugar de eso, pero gracias de todos modos. –

+0

su asp: HiddenField – Trikaldarshi

1

Renuncia - no mi código, pero he visto esto antes de utilizar:

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

La idea es almacenar la posición de la barra de desplazamiento en una cookie. Otra (¿mejor?) Opción sería almacenarla en un campo oculto (o campos). Espero que te ponga en marcha ...

+0

He probado y no trabajo – telebog

0

ASP.NET tiene esto integrado en todo lo que necesita hacer es incluir el MaintainScrollPositionOnPostback en su directiva de página.

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

Dudo que funcione en divs incrustado, solo la página principal en general. – FlySwat

+0

Sí, no estoy seguro de que esto funcione en los DIV contenidos en la página. Aunque no lo he intentado. –

+0

Lol, así que no leí la pregunta correctamente, lo siento amigos –

0

Reemplazar thebody con document.getElementById("divTest")

Si usted se preocupa de que el evento onscroll no funciona en opera/ff, puede intentar cambiar

thebody.onscroll=SaveScrollLocation; 

a

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

Aquí es una forma más refinada de la solución de flyswat usando jQuery que funcionó para mí:

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()); 
    } 
Cuestiones relacionadas