Wednesday 13 June 2012

Cross-page post ASP.NET & C#



ASP.Net 1.1 provided the feature of web forms to post back the form content only to themselves. But in practice in many situations, the solution requires posting to a different web page. 
The traditional workaround alternatives were to use :
  • Response.Redirect and/or
  • Server.Transfer 

to move to a different page and simulate cross page post-back behavior.

ASP.Net version 2.0 and further versions provided a feature known as Cross Page PostBack for a web form to post-back to a different web form (other than itself)

Post to a different page:

To set a web form to post back to a different web form, in the source web form, set the PostBackURL property of a control that implements IButtonControl (eg. Button, ImageButton, LinkButton) to the target web form. When the user clicks on this button control, the web form is cross-posted to the target web form. No other settings or code is required in the source web form.

Access source page info within the posted page: FindControl Method

The target web form resulting from the cross-page postback provides a non-null PreviousPage property. This property represents the source page and provides reference to the source web form and its controls.

The controls on the source page can be accessed via the FindControl method on the object returned by the PreviousPage property of the target page.

protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null)
        {
            TextBox TextBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
            label1.Text = String.Format("Text was:{0}", TextBox1.Text);
        }
    }




Page1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Page1.aspx.cs" Inherits="Page1" %>

<!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">
    <div>
   
        Enter Some value:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /><br />
        <asp:Button ID="Button1" Text="Send my text" PostBackUrl="~/Page2.aspx" runat="server"/>
   
    </div>
    </form>
</body>
</html>

Page2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Page2.aspx.cs" Inherits="Page2" %>

<!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">
    <div>
    <asp:Label id="label1" runat="server"></asp:Label>
   
    </div>
    </form>
</body>
</html>


Page2.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Page2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (PreviousPage != null)
        {
            TextBox TextBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
            label1.Text = String.Format("Text was:{0}", TextBox1.Text);
        }
    }
  
}



I hope this will help :)

No comments:

Post a Comment