Existen diferentes formas de pasar datos entre formas en la web. Sabemos que
el protocolo http no guarda el estado (stateless), asi que los datso
deben ser guardados en alguna parte. A diferencia del ASP tradicional en ASP.NET
existen diferentes vias para hacerlo:
Para enviarlo:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("WebForm2.aspx?id=" + TextBox1.Text);
}
Para recibirlo:
string queryStringID = Request.QueryString["id"];
2.- Cookies
Para guardar el valor de TextBox1.Text en una cookie:
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie cookie = new HttpCookie("UserName");
cookie.Value = TextBox1.Text;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
Response.Redirect("WebForm2.aspx");
}
Para leerla:
if(Request.Cookies["UserName"] != null)
Response.Write(Request.Cookies["UserName"].Value);3.- Variables de Sesión:
Para poner el valor del TextBox1.Text en una variable de sesión:
protected void Button1_Click(object sender, EventArgs e)
{
Session["UserName"] = TextBox1.Text;
Response.Redirect("WebForm2.aspx");
}Para leerla:
Response.Write(Session["UserName"]);
4.- Cross Page Posting:
Poner en la propiedad PostBackUrl del Button1 la dirección de la segunda página:
Y en la segunda página podemos obtener el valor de la siguiente manera:
TextBox txtFirstPage = (TextBox)(PreviousPage.FindControl("TextBox1"));
Response.Write(String.Format("You wrote {0} in Page1",txtFirstPage.Text));
5.- Submit Form.
Esto funciona con controles HTML que no sean del lado del servidor.
Ejemplo de la primera página:
<form id="Form1" method="post" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
<form name="SubmittedForm" action="WebForm2.aspx" method="post">
<input id="Submit1" type="submit" value="submit" onclick="CopyTextToHiddenField()" />
<input name="Hidden1" type="hidden" />
</form>
La función CopyTextToHiddenField() copia el valor de la caja de texto a un campo escondido. Hay que ponerla dentro del tag <head> como en el siguiente ejemplo:
<script language="javascript">
function CopyTextToHiddenField()
{
var textbox1Value = document.getElementById("<%=TextBox1.ClientID%>").value;
document.forms[1].document.getElementById("Hidden1").value = textbox1Value;
}
</script>
Ahora podemos obtener el valor de la siguiente manera:
Response.Write(Request.Form["Hidden1"]);
6.- Server.Transfer o Server.Execute:
En la página que tenemos nuestra forma debemos usar el Server.Transfer o Server Execute:
protected void Button1_Click1(object sender, EventArgs e)
{
Server.Transfer("WebForm2.aspx", true);
}
En la página en que queremos obtener los datos:
Response.Write(Request.Form["TextBox1"]);
Estas son las formas que el sitio de Microsoft nos dice que podemos usar, pero hay una forma que a mi parecer es la mejor de las que he mostrado anteriormente (aunque no sea la ideal en todos los casos) y es la siguiente:
En la página inicial colocamos nuestros controles y los exponemos como propiedades:
public partial class _Default : System.Web.UI.Page
{
public TextBox pp_Nombre
{
get { return TextBox1; }
}
public TextBox pp_Telefono
{
get { return TextBox2; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Y en la segunda página colocamos la siguiente directiva:
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = PreviousPage.pp_Nombre.Text; Label2.Text = PreviousPage.pp_Telefono.Text;
}
}
Como pueden ver en .NET existen varias formas de hacerlo y podemos escoger el que más se ajuste a nuestras necesidades.
NOTA:
Si estás usando Master Pages puedes usar Cross Page Posting, pero al buscar el control debes obtener primero una referencia al ContentPlaceHolder ya que es el contenedor de los controles de tu página aspx.
Ejemplo:
En la primera página pones en el control que vaya a llamar a la otra página el nombre de esta en la propiedad PostBackUrl.
y en la segunda accedes a los controles de la siguiente manera:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
ContentPlaceHolder cph = (ContentPlaceHolder)Page.PreviousPage.Master.FindControl("LessonsLearnedPlaceHolder");
if (cph != null)
{
TextBox Sourcelbl = (TextBox)cph.FindControl("txtfailureid");
Component cmp = new Component();
if (Sourcelbl != null)
{
this.LblFailureid.Text = Sourcelbl.Text;
cmp.FailureID = LblFailureid.Text;
}
}
}
}
Y con esto tendremos acceso a las propiedades de todos los controles de la página previa.
- Query String.
- Cookies.
- Variables de sesión.
- Cross Page Posting.
- Submit Form.
- Server.Transfer o Server.Execute.
Para enviarlo:
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("WebForm2.aspx?id=" + TextBox1.Text);
}
Para recibirlo:
string queryStringID = Request.QueryString["id"];
2.- Cookies
Para guardar el valor de TextBox1.Text en una cookie:
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie cookie = new HttpCookie("UserName");
cookie.Value = TextBox1.Text;
cookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);
Response.Redirect("WebForm2.aspx");
}
Para leerla:
if(Request.Cookies["UserName"] != null)
Response.Write(Request.Cookies["UserName"].Value);3.- Variables de Sesión:
Para poner el valor del TextBox1.Text en una variable de sesión:
protected void Button1_Click(object sender, EventArgs e)
{
Session["UserName"] = TextBox1.Text;
Response.Redirect("WebForm2.aspx");
}Para leerla:
Response.Write(Session["UserName"]);
4.- Cross Page Posting:
Poner en la propiedad PostBackUrl del Button1 la dirección de la segunda página:
Y en la segunda página podemos obtener el valor de la siguiente manera:
TextBox txtFirstPage = (TextBox)(PreviousPage.FindControl("TextBox1"));
Response.Write(String.Format("You wrote {0} in Page1",txtFirstPage.Text));
5.- Submit Form.
Esto funciona con controles HTML que no sean del lado del servidor.
Ejemplo de la primera página:
<form id="Form1" method="post" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</form>
<form name="SubmittedForm" action="WebForm2.aspx" method="post">
<input id="Submit1" type="submit" value="submit" onclick="CopyTextToHiddenField()" />
<input name="Hidden1" type="hidden" />
</form>
La función CopyTextToHiddenField() copia el valor de la caja de texto a un campo escondido. Hay que ponerla dentro del tag <head> como en el siguiente ejemplo:
<script language="javascript">
function CopyTextToHiddenField()
{
var textbox1Value = document.getElementById("<%=TextBox1.ClientID%>").value;
document.forms[1].document.getElementById("Hidden1").value = textbox1Value;
}
</script>
Ahora podemos obtener el valor de la siguiente manera:
Response.Write(Request.Form["Hidden1"]);
6.- Server.Transfer o Server.Execute:
En la página que tenemos nuestra forma debemos usar el Server.Transfer o Server Execute:
protected void Button1_Click1(object sender, EventArgs e)
{
Server.Transfer("WebForm2.aspx", true);
}
En la página en que queremos obtener los datos:
Response.Write(Request.Form["TextBox1"]);
Estas son las formas que el sitio de Microsoft nos dice que podemos usar, pero hay una forma que a mi parecer es la mejor de las que he mostrado anteriormente (aunque no sea la ideal en todos los casos) y es la siguiente:
En la página inicial colocamos nuestros controles y los exponemos como propiedades:
public partial class _Default : System.Web.UI.Page
{
public TextBox pp_Nombre
{
get { return TextBox1; }
}
public TextBox pp_Telefono
{
get { return TextBox2; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Y en la segunda página colocamos la siguiente directiva:
<%@
PreviousPageType
VirtualPath="~/Default.aspx"
%>
Después colocamos el
siguiente código para leer los
datos:public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = PreviousPage.pp_Nombre.Text; Label2.Text = PreviousPage.pp_Telefono.Text;
}
}
Como pueden ver en .NET existen varias formas de hacerlo y podemos escoger el que más se ajuste a nuestras necesidades.
NOTA:
Si estás usando Master Pages puedes usar Cross Page Posting, pero al buscar el control debes obtener primero una referencia al ContentPlaceHolder ya que es el contenedor de los controles de tu página aspx.
Ejemplo:
En la primera página pones en el control que vaya a llamar a la otra página el nombre de esta en la propiedad PostBackUrl.
y en la segunda accedes a los controles de la siguiente manera:
protected void Page_Load(object sender, EventArgs e)
{
if (Page.PreviousPage != null)
{
ContentPlaceHolder cph = (ContentPlaceHolder)Page.PreviousPage.Master.FindControl("LessonsLearnedPlaceHolder");
if (cph != null)
{
TextBox Sourcelbl = (TextBox)cph.FindControl("txtfailureid");
Component cmp = new Component();
if (Sourcelbl != null)
{
this.LblFailureid.Text = Sourcelbl.Text;
cmp.FailureID = LblFailureid.Text;
}
}
}
}
Y con esto tendremos acceso a las propiedades de todos los controles de la página previa.
Comentarios
Publicar un comentario