JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Creación de un control botón ASP.NET para regreso automático

Una cuestión común en todas las aplicaciones Web es hacer que la navegación sea lo más sencilla posible para nuestros usuarios. Una situación muy habitual es la de reutilizar una página para varios propósitos de modo que a ésta se puede llegar por diversos sitios. Si colocamos un botón de "Cancelar" o "Volver" es frecuente que tengamos que escribir bastante código para asegurarnos que devolvemos al usuario al lugar del que vino teniendo en cuenta los diferentes "postbacks" producidos por los controles de la página.

El siguiente control permite aislarnos de este tipo de cosas haciendo por debajo él todo el trabajo.

Añade un nuevo control de usuario y llámale "Volver.ascx". Sobre su superficie coloca simplemente un botón con el nombre cmdVolver y asígnale el texto "Volver". En el archivo de código escribe lo siguiente (en C#, en VB sería más o menos igual):

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Controles_Volver : System.Web.UI.UserControl
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
      try
      {
        this.ViewState["referer"] = GetRefererURL();
      }
      catch { }
    }
  }

 
protected
void cmdVolver_Click(object sender, EventArgs e)
  {
    Regresar(ViewState["referer"]);
  }

  public static string GetRefererURL()
  {
    try
    {
      return HttpContext.Current.Request.UrlReferrer.PathAndQuery;
    }
    catch 
    {
      return "";
    }
  }

  public static void Regresar(object sURL)
  {
    try
    {
      HttpContext.Current.Response.Redirect(sURL.ToString());
    }
    catch { }
  }
}

A partir de ahora dispones de un botón para volver a la URL desde la que se llegara a la página en donde lo coloques. Tiene en cuenta que pueda ser una referencia directa y evita que Redirect "rompa" debido a alguna URL mal formada.

Para usarlo lo único que tienes que hacer es arrastrarlo sobre cualquier formulario Web y listo. Te puede ahorrar mucho trabajo repetitivo. En mi último proyecto Web con .NET 2.0 lo he usado y me ha ahorrado bastante tiempo.

NOTA: Hay que tener cuidado con el hecho de que si la página en la que lo colocas envía a otra nueva y ésta también tiene un botón de estos te uedes encontrar en un bucle cerrado. Por ejemplo, la página A enlaza con la página B que tiene un botón de regreso automático. La B enlaza a su vez con la C que también lo tiene. Si vamos de la A la B al pulsar "Volver" nos dejará en la A. Pero si vamos de la A a la B y de la B a la C, al pulsar el botón "Volver" en esta última nos deja en "B", la cual toma como referente la "C" y si pulsamos "Volver" nos dejará de nuevo en C y así en un bucle infinito ¿me he exlicado?.

Conclusión: úsalo sólo en páginas finales que no te lleven directamente a otras. Bien pensado estas deberían ser la mayoría.

José Manuel Alarcón
Banner

Comentarios (3) -

IMHO, creo que no es del todo "óptimo" hacer un postback para sólo redireccionar a una determinada página.

Saludos

Responder

Hombre, vale... pero es lo más sencillo y habitual. Por otra parte es transparente al usuario ya que lo único que pasa entre bambalinas es que el servidor recibe el Postback y envía una cabecera de redirección al navegador cliente que se conecta a la otra página. Para el usuario es como si todo esto no existirea. Le parecerá que va directo a la ota página.

De todos modos sería muy fácil retocar el control para que generase código de JavaScript para que al pulsar el botón éste fuera a la página adecuada directamente desde el cliente. O que en lugar de un botón se usase un enlace directo. De todos modos desde mi punto de vista no vale mucho la pena perder el tiempo con eso pues la redirección funciona perfectamente y de manera transparente y es directa de implementar.

Responder

Redirect rompe cuando la URl está mal formada, o cuando va en blanco, por ejemplo. En el caso del control que menciono, por ejemplo, si vas directamente a la pçagina el referer está en blanco y por lo tanto al intentar usar redirect se producirá una excepción.

El hecho de que esté dentro de otro control de usuario no tiene influencia en su funcionamiento. Seguramente será debido a otra cosa, como el método usado al hacer clic en la barra de herramientas.

Response.Redirect y Server.Transfer son cosas totalmente diferentes y no tienen nada que ver. El redirect envía una cabecera de redirección al navegadorb y es éste el que solicita la nueva página (es decir hay un viaje del servidor al cliente y otro más del cliente al servidor). A todos los efectos es como si pulsaras directamente en un enlace a la página.
Transfer sin embargo cambia el código que se ejecuta directamente en el servidor, sin pasar por el cliente y no tiene nada que ver con lo anterior. Personalmente se me ocurren muy pocas ocasiones en las que sea una buena idea usar Server.Transfer en ASP.NET. Imagino que lo conservan por compatibilidad con ASP 3.0 clásico, donde sí podía ser más útil.

Saludos

Jose.

Responder

Agregar comentario