post icon

Pasar parametros por Postback en ASP.Net [Cross Page Postback]

Hace meses atrás vimos como pasar parametros por GET en ASP.Net. En esta ocasión veremos como hacerlo por POST para evitar mostrar en la URL los datos (en texto plano o encriptado) que estamos pasando, evitando la fácil manipulación de ellos.

Vale destacar que esta opción está disponible desde la versión 2.0 de ASP, y existen 2 maneras de utilizarlas.

La primer manera es algo más flexible pero con mayor posibilidad de crear errores en tiempo de ejecución.Comenzamos por utilizar un control que puede ser un button, hyperlink o imageButton que tenga la propiedad PostBackUrl, alli indicamos en (estando en la página origen) la URL destino, ejemplo:

“~/develop/main/groups/default.aspx”

Al pulsar sobre dicho control desde el browser será hecho el postback a la URL marcada, y no pasará por el lado servidor de la página de origen.

Lo que evita que puedas hacer controles de validación del server antes de envíar la petición a la pagina destino lo que te obliga a implementar validaciones clientes JS y luego en destino por el lado servidor, ni tampoco servirá si intentas hacer un Response.Redirect(), ya que este fuerza una llamada nueva en vez de un postback.

Luego en destino preguntamos por el valor de la página origen asi

if (PreviousPage != null)
{
  TextBox txt1 = (TextBox)PreviousPage.FindControl("TextBox1");
  Label1.Text = txt1.Text;
}

El error que podria darse aqui es que si cambias el nombre del control en origen, findControl nunca lo encontraría y se produciría una excepción, la cual puedes manejar pero igual dejaría de funcionar como debe.

La segunda manera, que es tipando los tipos de controles de origen consiste en agregar en la cabecera del destino la siguente línea

<%@ PreviousPageType VirtualPath="~/PaginaOrigen.aspx" %>

Y agregando los accesores publicos a los controles que necesitemos

public string Texto
{
   get {return txt1.Text; }
}

Y podremos invocar directamente al control en la página destino

if (PreviousPage != null)
{
  Label1.Text = PreviousPage.Texto;
}
20 agosto 2012

Comentarios desde Facebook:

  1. avatar
    Roq ARGENTINA Google Chrome Windows
    24 septiembre 2013 at 11:01 #

    Con esta solución siempre me voy a la página que yo ponga en PostBackUrl. Pero si yo quiero que el destino varíe según algún otro control? Como haría?

  2. avatar
    veronica luna NICARAGUA Mozilla Firefox Windows
    12 octubre 2012 at 17:19 #

    Excelente post, felicitaciones, me fu de mucha ayuda, fue el unico que me funciono.
    gracias!!!!!!!!!!!!!!!!!:lol::lol::lol:

Responder