Redirigir formularios en ASP.NET

Por defecto una página ASP.NET, al usar controles ASP.NET estos funcionan a base de eventos. Cuando hacemos click en un botón de una página web, esta se carga de nuevo y se ejecuta el método enlazado al evento del botón Click.

Las páginas en ASP.NET contienen un solo formulario con el atributo id y el runnat=»server». Al generarse estos eventos la página se llama a ella misma para poder capturarlos y ejecutar la función asociada. Eso quiere decir que el atributo action del formulario apunta a la página que lo contiene pero, ¿y si queremos que nuestro formulario se redirija a una página diferente?. Hay diferentes soluciones para esto. Una de ellas es hacer lo que hemos hecho siempre los desarrolladores web, coger nuestro formulario, hacerlo en html y hacer que action apunte a la página que queramos. Otra forma és recoger todos los datos en el evento Click del botón, ponerlos en la variable de estado Session, o en la QueryString si se puede y redirigir al usuario a la otra página con Response.Redirect(). Personalmente de estas dos prefiero la primera, aunque hay otra manera que, usando los formularios de ASP.NET, también conseguimos los mismo de una manera más limpia. Solo tenemos que poner una pequeña función en Javascript.

La primera cosa que debemos hacer desde nuestra función en javascript es cambiar una variable llamada __VIEWSTATE. Cuando una página de ASP.NET recibe un post mira la variable __VIEWSTATE, ASP.NET usa esta variable para muchas cosas que ahora no vienen al caso, pero una de ellas es que si dejamos que se redirija nuestra página con el __VIEWSTATE que tenía no va a poder validar la página y nos dará un mensaje de error parecido a este: «The viewstate is invalid for this page and might be corrupted.». Si intentamos borrar los datos también dará el mismo error. Lo que haremos será renombrar la variable a otro nombre que no moleste, así la página que reciba la información no recibirá ningún __VIEWSTATE y no dará error. Ahora solo nos falta redirigir la respuesta a la página que queramos cambiando el atributo action del formulario.

Así que nos crearemos una función en Javascript que hará justamente esto:

function RedirigirA(nombreDeLaPagina)
{
    document.forms[0].action = nombreDeLaPagina;
    document.forms[0].__VIEWSTATE.name = 'lala';
}

Ahora solo falta decirle que ejecute ésto al submitir la página en el método Page_Load de nuestra página:


private void Page_Load(object sender, System.EventArgs e)
{
    Submit.Attributes.Add("onclick", "RedirigirA('OtraPagina.aspx');");
}

En este caso he dado por supuesto que cualquier evento de Postback hará que la página se redirija al otro formulario pero, en otros casos, a lo mejor solo queremos que se haga al clicar en ciertos botones. Solo habrá que añadir la función en el lugar correcto.

Ahora ya podemos, desde la página que recibe el formulario, acceder a los datos desde C# como siempre:

private void Page_Load(object sender, System.EventArgs e)
{
    Result.Text = Request.Form["MiParametro"].ToString();
}

Espero que os sea útil algún día.

2 comentarios sobre “Redirigir formularios en ASP.NET”

  1. Ostras! Pués tienes toda la razón.!
    Llevo tiempo trabajando en ASP.NET (desde la primera versión) y para hacer PostBack a otra página usaba lo que he explicado en este post, y no sabía de esta posibilidad.
    Si la llego a conocer antes… y mira que es simple
    Pués como mola!.
    Muchísimas gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *