En esta ocasión hablaremos sobre diferentes tipos de comunicación entre WebForms, existentes para ASP.NET.

Veamos el WebForm Origen,  el cuál utilizaremos para presentar todos los ejemplo:

ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFormOrigen.aspx.cs"
    Inherits="ComunicacionWebForms.WebFormOrigen" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    Datos del Formulario:
    <div>
        <table style="background-color: Silver;">
            <tr>
                <td style="font-weight: bold">
                    Nombre
                </td>
                <td>
                    <asp:TextBox ID="TxtNombre" runat="server"></asp:TextBox>
                </td>
            </tr>
            <tr>
                <td style="font-weight: bold">
                    Sexo
                </td>
                <td>
                    <asp:RadioButtonList ID="RblSexo" runat="server" RepeatDirection="Horizontal">
                        <asp:ListItem Text="Femenino" Value="F" />
                        <asp:ListItem Text="Másculino" Value="M" />
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td style="font-weight: bold">
                    Ciudad
                </td>
                <td>
                    <asp:DropDownList ID="DDLCiudad" runat="server">
                        <asp:ListItem Text="--Seleccione--" Value="" />
                        <asp:ListItem Text="Anapoima" Value="1" />
                        <asp:ListItem Text="Bogotá" Value="2" />
                        <asp:ListItem Text="Zipaquirá" Value="3" />
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td style="font-weight: bold">
                    Edad
                </td>
                <td>
                    <asp:TextBox ID="TxtEdad" Style="text-align: right; width: 30px" runat="server" MaxLength="3">
                    </asp:TextBox>
                </td>
            </tr>
        </table>
    </div>
    <br />
    <br />
    <asp:Button ID="BtSendQueryString" runat="server" Text="Comunicación con QueryString"
        OnClick="BtSendQueryString_Click" />
    <br />
    <br />
    <asp:Button ID="BtSendFromPreviousPage" runat="server" Text="Comunicación con PreviousPage"
        OnClick="BtSendFromPreviousPage_Click"></asp:Button>
    <br />
    <br />
    <asp:Button ID="BtSendSession" runat="server" Text="Comunicación con Session" OnClick="BtSendSession_Click">
    </asp:Button>
    <br />
    <br />
    <asp:Button ID="BtSendCookies" runat="server" Text="Comunicación con Cookies"
        onclick="BtSendCookies_Click" >
    </asp:Button>
    </form>
</body>
</html>

C# Code-Behind, implementación de la comunicación entre WebForms utilizando Cookies, Cross-Page Posting, Session y QueryString.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ComunicacionWebForms
{
    public partial class WebFormOrigen : System.Web.UI.Page
    {
        ///
<summary> /// Propiedades expuestas para lograr la comunicación con la página destino
 /// usando PreviousPage
 /// </summary>

        #region Propiedades
            public string Nombre
            {
                get
                {
                    if (ValidForm())
                        return TxtNombre.Text;
                    return string.Empty;
                }
            }
            public string Ciudad
            {
                get
                {
                    if (ValidForm()) return DDLCiudad.SelectedItem.Text;
                    return string.Empty;
                }
            }
            public string Edad
            {
                get
                {
                    if (ValidForm())
                        return TxtEdad.Text;
                    return string.Empty;
                }
            }

            public string Sexo
            {
                get
                {
                    if (ValidForm())
                        return RblSexo.SelectedItem.Text;
                    return string.Empty;
                }
            }

        #endregion
        public int MyProperty { get; set; }
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        ///
<summary> /// Valida genericamente el formulario Web
 /// </summary>

        ///
        public bool ValidForm()
        {
            if (string.IsNullOrWhiteSpace(TxtNombre.Text) || RblSexo.SelectedItem == null || DDLCiudad.SelectedIndex == 0 || string.IsNullOrWhiteSpace(TxtEdad.Text))
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), UniqueID, "alert('Por favor llene los datos del formulario');", true);
                return false;
            }
            return true;
        }

        ///
<summary> /// Comunicación utilizando QueryString en la Url de la página destino
 /// </summary>

        ///
        ///
        protected void BtSendQueryString_Click(object sender, EventArgs e)
        {
            if (!ValidForm())
                return;
            Response.Redirect(string.Format("WebFormDestinoQueryString.aspx?nombre={0}&sexo={1}&ciudad={2}&edad={3}", TxtNombre.Text, RblSexo.SelectedItem.Text, DDLCiudad.SelectedItem.Text, TxtEdad.Text));
        }

        ///
<summary> /// Comunicación utilizando el objeto PreviuosPage en la página destino
 /// </summary>

        ///
        ///
        protected void BtSendFromPreviousPage_Click(object sender, EventArgs e)
        {
            if (!ValidForm())
                return;
                //Llama la página destino manteniendo los recursos y propiedades de la página actual
            Server.Transfer("WebFormDestinoPreviousPage.aspx");
        }

        ///
<summary> /// Comunicación utilizando variables de Session en ASP.NET
 /// </summary>

        ///
        ///
        protected void BtSendSession_Click(object sender, EventArgs e)
        {
            if (!ValidForm())
                return;
            Session["nombre"] =TxtNombre.Text;
            Session["sexo"] = RblSexo.SelectedItem.Text;
            Session["ciudad"] = DDLCiudad.SelectedItem.Text;
            Session["edad"] = TxtEdad.Text;
            Response.Redirect("WebFormDestinoSession.aspx");
        }

        ///
<summary> /// Comunicación utilizando Cookies
 /// </summary>

        ///
        ///
        protected void BtSendCookies_Click(object sender, EventArgs e)
        {
            if (!ValidForm())
                return;
            Response.Cookies["nombre"].Value = TxtNombre.Text;
            Response.Cookies["sexo"].Value = RblSexo.SelectedItem.Text;
            Response.Cookies["ciudad"].Value = DDLCiudad.SelectedItem.Text;
            Response.Cookies["edad"].Value = TxtEdad.Text;
            Response.Redirect("WebFormDestinoCookies.aspx");
        }
    }
}

1- Comunicación con QueryString: Permite enviar datos entre una y otra página información a través de la url del explorador.

C# CodeBehind, Recepción Datos por QueryString.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ComunicacionWebForms
{
    public partial class WebFormDestinoQueryString : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string datos =
                string.Format("Comunicación con QueryString

Hola, {0}
"+
                              "Sexo: {1}
Ciudad: {2}
Edad: {3}",
                                Request.QueryString["nombre"], Request.QueryString["sexo"],
                                Request.QueryString["ciudad"], Request.QueryString["edad"]);
            Response.Write(datos);
        }
    }
}

2- Cuando se reciben datos usando el objeto PreviousPage en la página destino, debemos agregar la directiva PreviousPageType al archivo aspx, así:


</pre>
<form id="form1">
 </form>
<pre>

Veamos cómo desde C# en el servidor podemos hacer uso del objeto PreviousPage.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ComunicacionWebForms
{
    public partial class WebFormDestinoPreviousPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Debido a que se registro el tipo de página con la
            //clausula PreviousPageType en el aspx, las propiedades públicas
            //pueden ser accedidas desde este contexto.
            if (PreviousPage != null)
            {
                string datos = string.Format("Comunicación con PreviousPageType

" +
                    "Hola, {0}
Sexo: {1}
Ciudad: {2}
Edad: {3}",
                    PreviousPage.Nombre, PreviousPage.Sexo,
                    PreviousPage.Ciudad, PreviousPage.Edad);
                Response.Write(datos);
            }
        }
    }
}

3- Ahora veamos como se puede implementar desde C# la recepción de información usando variables de Session en ASP.NET.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ComunicacionWebForms
{
    public partial class WebFormDestinoSession : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string datos = string.Format("Comunicación con Session

"+
                "Hola, {0}
Sexo: {1}
Ciudad: {2}
Edad: {3}",
                Session["nombre"], Session["sexo"],
                Session["ciudad"], Session["edad"]);
            Response.Write(datos);
        }
    }
}

4- Por último veamos cómo podemos leer las Cookies mediante C# en ASP.NET


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ComunicacionWebForms
{
    public partial class WebFormDestinoCookies : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            string datos = string.Format("Comunicación con Cookies

"+
            "Hola, {0}
Sexo: {1}
Ciudad: {2}
Edad: {3}",
            Request.Cookies["nombre"].Value, Request.Cookies["sexo"].Value,
            Request.Cookies["ciudad"].Value, Request.Cookies["edad"].Value);
            Response.Write(datos);
        }
    }
}

Código Aquí.

Anuncios