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.

Escrito por un humano, no por una IA