Como Mantener el Scroll despues de un PostBack ASP.net ( As Maintain Scroll after a PostBack ASP.net )

Saludos amig@s,
Cuando trabajamos con ASP.net nos hemos dado cuenta que si tenemos una pagina muy extensa Horizontalmente y damos click en un boton que esta muy abajo de la página esto generará un PostBack, en termino simples "Refrescará la pagina" y nos llevará al Inicio de la Pagina, lo cual es incomodo porque nuevamente tendrémos que deslizar el Scroll de la pagina hacia abajo.

OPCION 1:
Agreguen la linea de codigo que se encuentra resaltada, indicandole que mantenga la posicion del Scroll en el PostBack


<%@ Page Language="C#" AutoEventWireup="true" MaintainScrollPositionOnPostback="true"
    CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
    </form>
</body>
</html>

El Codigo Anterior tambien podemos hacerlo en codigo c#, y tendíamos que hacerlo en el evento LOAD.


public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.MaintainScrollPositionOnPostBack = true;
    }
}

OPCION 2:
Si por alguna razon ninguna de las opciones anteriores les funciono, aveces por temas del navegador pueden usar el siguiente codigo en java script que practicamente es la misma funcionalidad.

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script>
        window.onload = function () {
            var scrollY = parseInt('<%=Request.Form["scrollY"] %>');            
              if (!isNaN(scrollY)) {
                  window.scrollTo(0, scrollY);
              }
          };
             window.onscroll = function () {
                 var scrollY = document.body.scrollTop;
                 if (scrollY == 0) {
                     if (window.pageYOffset) {
                         scrollY = window.pageYOffset;
                     }
                     else {
                         scrollY = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
                     }
                 }
                 if (scrollY > 0) {
                     var input = document.getElementById("scrollY");
                     if (input == null) {
                         input = document.createElement("input");
                         input.setAttribute("type", "hidden");
                         input.setAttribute("id", "scrollY");
                         input.setAttribute("name", "scrollY");
                         document.forms[0].appendChild(input);
                     }
                     input.value = scrollY;
                 }
             };
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
      
    </div>
    </form>
</body>
</html>


Cabe recalcar que esto funciona solo cuando la pagina hace PostBack, si estamos usando Ajax, o Update Panel la pagina no refrescará por ende nuestro Scroll se mantendrá en su posicion ;-).

Espero les sirva este post y publiquen sus comentarios y como les fue.

Saludos.

Comments

  1. Muchisimas gracias!!! Era justo lo que necesitaba. Pero tengo un inquietud, si el valor que retorna window.pageYOffset siempre es Undefined, porque solamente no se coloca scrollY = 0 ?, Disculpa mi ignarancia pero soy principiante en este tema y ps solo dudas me nacen.. jejeje

    ReplyDelete
  2. Gracias! Estuve probando otras opciones y nada... La Opción 2 es lo que necesitaba: simple y funcional

    ReplyDelete

Post a Comment

Popular posts from this blog

Error al Iniciar Oracle SQL Developer 11g - Unable to find Java Virtual Machine

How to run ng serve in a different port
Como ejecutar ng serve en un puerto diferente