Necesito saber si el usuario hace clic en el botón atrás del navegador o el botón Actualizar.

Necesito para redirigir la página a la página de Error cuando hace clic en la espalda o en el botón actualizar. Cómo hacer esto.

Necesito hacer esto en javascript para mi ASP.net página

InformationsquelleAutor balaweblog | 2008-11-15

8 Comentarios

  1. 12

    Primero de todo, dar mensajes de error si los usuarios utilizan la Espalda o que tengo que actualizar una página por cualquier motivo, es una idea realmente mala. En su lugar, usted debe tratar de forma transparente con eso. Pensar acerca de una página no aparece plenamente debido a los problemas en el nivel de transporte – la única opción que tiene el usuario es volver a cargar o volver atrás.

    Para responder a su pregunta, usted tiene que mantener un seguimiento de la navegación del usuario a ti mismo, eso significa que en el lado del servidor. Olvídate de java-script aquí. Si el usuario visita un sitio web, usted puede almacenar la información en una Sesión de asociados para el usuario (hay varios métodos para mantener estas sesiones únicas, y no voy a entrar en detalles aquí).
    Si usted guarda en su interior las estructuras de las páginas que el usuario visita últimamente, es fácil determinar una página que se visita dos veces, o en la navegación de entrar en el «mal» de dirección.

    Fácilmente se podría generalizar esta (y hacer todo más robusto, por ejemplo en contra de los usuarios saltar violentamente entre las direcciones url, o de más de un paso a la vez) por la construcción de un gráfico de «permitido» de navegación y atravesarlo, mientras que el usuario está visitando sitios web.

    El comportamiento correcto, a continuación, si el usuario está haciendo un «mal» de navegación (como retroceder, volver a cargar == visita dos veces) es para hacerle volver a la pista. No para dar un mensaje de error de que no puede escapar! Como no se le permite volver a cargar o volver, él no tiene opciones de la izquierda.

    • El que le dio -1 podría indicar una razón, por favor!
    • Hay algunas razones válidas para detener una actualización de la página, en general, a la realización de una transacción. Sin embargo, como usted dice, usted necesita para detectar esta en el servidor y mostrar una página apropiada/mensaje (por ejemplo, el pago ya ha sido tomada).
    • Es mejor responder a la pregunta planteada en lugar de indicar la razón por la que usted no cree que debería realizarse en el primer lugar.
    • Me dan la respuesta que yo creo que es más útil para el investigador. El formulario no completamente alinee con la pregunta debido a que la pregunta tiene derecho es a veces tan duro como el de dar una respuesta correcta. En este caso específico, @balaweblog a sí mismo de acuerdo en que mi respuesta fue la más útil para él, entre varios otros, por aceptar mi respuesta. Sinceramente, no entiendo cómo usted piensa que usted sabe mejor que seis años más tarde y se siente la necesidad de dar un voto. Que tengan un buen día aunque.
  2. 5

    No se puede. El navegador no envía a su propio eventos de interfaz de usuario para el servidor. Todo lo que se obtiene son las peticiones http y uno ve muy parecida a otra. Tal vez el hecho clic en el botón atrás o tal vez simplemente reescribir la última dirección url en. Nos dicen cuáles son los problemas que está causando y podemos ayudarle a adaptar su proyecto para trabajar con el protocolo http, un poco mejor.

  3. 4

    Implementar un PageToken utilizando un guid/o marca de tiempo almacenado en la sesión y comparar el valor de un campo oculto en el formulario. Hice esto a través de un PageToken Clase. Si el valor del campo oculto y la variable de sesión no coinciden, entonces usted está fuera de sintonía y se encargará de ello. El truco está en el mapa todos los eventos en su página.

    public void GeneratePageToken()
    {
        SessionVariables currSession = new SessionVariables();
        hfMasterPageToken.Value = System.DateTime.Now.ToString();
        currSession.PageToken = hfMasterPageToken.Value;
    }
    
    public string GetLastPageToken
    {
        get
        {
            SessionVariables currSession = new SessionVariables();
            return currSession.PageToken;
        }
    }
    
    public bool TokensMatch
    {
        get
        {
            SessionVariables currSession = new SessionVariables();
            return (currSession.PageToken != null
                && currSession.PageToken == hfMasterPageToken.Value);
        }
    }

    En su método de Evento antes de su regular código:

    if (this.TokensMatch == false)
    {
        //Reload the data.
        //Generates a NewPageToken (this.GeneratePageToken();)
        ReloadDataMethod();
        this.MessageToUser =
         "Data reloaded.  Click Edit or Insert button to change.";
        this.MessageType = MessageToUserType.Success;
        this.DisplayMessageToUser = true;
        return;
    }
  4. 3

    Con Site.Master

    En su Site.Master, después de <body>

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
    <dx:ASPxLoadingPanel ID="MainLoadingPanel" runat="server" ClientInstanceName="MainLoadingPanel" Modal="True" />
    <input type="hidden" id="refreshed" value="no" />
    <script type="text/javascript" language="javascript">
        MainLoadingPanel.Show();
        window.onload = function () {
            var e = document.getElementById("refreshed");
            if (e.value == "no") {
                MainLoadingPanel.Hide();
                e.value = "yes";
            } else {
                e.value = "no";
                location.reload(true); //Reload the page or redirect...
            }
        };
    </script>

    Sin Site.Master

    En el código común, después de las <body>

    <input type="hidden" id="refreshed" value="no" />
    <script type="text/javascript" language="javascript">
        window.onload = function () {
            var e = document.getElementById("refreshed");
            if (e.value == "no") {
                e.value = "yes";
            } else {
                e.value = "no";
                location.reload(true); //Reload the page or redirect...
            }
        };
    </script>
    • Pero lo que si usted no está utilizando las Páginas maestras?
    • post actualizado.
    • interesante idea. Sin embargo difícil de traducir a una única página de las acciones de una masterpage con otras páginas (que quieren apoyar actualización) – usted puede elaborar?
  5. 1

    Supongo que usted quiere hacer esto, ya que posterior a la espalda, para evitar volver a presentar algún tipo de acción o de datos a la derecha? irónicamente, esto no era tan enorme de un problema de espalda antes de asp.net webforms … porque, en general, tenían a post a una URL diferente en lugar de la misma (como en el asp.net mvc en realidad).

    Uno de los trucos que me gustaba usar … aunque en la mayoría de los técnicos de puntos es más lento … era tener una página de entrada, y una página de entrada. La salida HTML de la página de entrada era de unos super mínima HTML con un pequeño javascript que sustituye la url de la página actual (de la página de entrada) en el historial del explorador con la página de resultados (o incluso el original de la página de referencia si realmente quería). El resultado fue que cuando el usuario haga clic en el botón atrás, él sería enviado a la entrada original de la página, o si se hace clic en actualizar, que había que estar ya en la nueva página de resultados.

    <html><body onload="location.replace('someURL.asp')"></body></html>
  6. 1

    Lo hicimos en Java/Struts1 por poner una propiedad en el botón de enviar. Si el botón de enviar se hizo clic en el botón de texto será enviado en la propiedad en el ActionForm. Si el usuario actualiza la información del valor no se ha establecido, así que sabíamos que el usuario no había hecho clic en el botón. En este caso, donde la propiedad estaba vacía, nos fuimos de nuevo, y dictó la primera página de la pageflow. YMMV en ASP.Net.

  7. 1

    Esto simplemente detecta si el usuario aterriza en una página utilizando los botones atrás/adelante… el único problema es con IE8 e inferiores, la versión de navegador no puede manejar esto.

    if(performance.navigation.type == 2)
    {
        //Do your code here
    }
  8. 0

    .NET 3.5 puede manejar muy bien el navegador (y adelante) botones. Buscar en Google: «Scriptmanager EnableHistory».
    Usted puede controlar que las acciones del usuario se agrega una entrada en el historial del explorador (ScriptManager -> AddHistoryPoint) y su ASP.NET la aplicación recibe un evento cuando el usuario hace clic en el navegador de los botones Atrás/Adelante.

Dejar respuesta

Please enter your comment!
Please enter your name here