Server.Transfer : Passing Values from One Page to Another Page

Some times, we want to pass values from one page to another page. There are many ways by which we can do this like: by using query string, or session variable, or Server.Transer etc.

Web Forms pages are classes in your application, and as such, you can create properties for them as you would any class. However, Web Forms pages have a very short lifetime, since they effectively exist only long enough to perform page processing. Properties on a Web Forms page therefore have limited use, since they exist only while the page is being processed. But if you transfer control from one page to another using specific techniques, the second page can still access properties on the first page.

This article shows you, how to pass values from one page to another page by using Server.Transfer() method.

Assign value to property of first page [ Form1.aspx ]

Declare Property : In first page, declare one or more read-only properties and return the property value you want to pass to the next page.

public string FirstName

{

          get

          { return txtFName.Value ; }

}

public string LastName

{

get

          { return txtLName.Value ; }

}

public string Address1

{

          get

          { return txtAdd1.Value ; }

}

public string Address2

{

          get

          { return txtAdd2.Value ; }

}

public NameValueCollection UserData

{

          get

          { return Request.Form; }

}

Call Server.Transer method to access second page.

private void btnForm2_ServerClick(object sender, System.EventArgs e)

{

          Server.Transfer("Form2.aspx");

}

 

private void btnForm3_ServerClick(object sender, System.EventArgs e)

{

          Server.Transfer("Form3.aspx");

}

To read property values from the source page in the called page

To get the property values of the first page from the called page, create an instance variable of the source page class. You then assign to it the HTTP object (an instance of the IHttpHandler class), the object that received the original request.

1. Create a global instance variable that is typed to the class of the source page.        

private Form1 frmSource;

2. In the Page_Load handler, get the source page from the Context.Handler object (IHttpHandler interface) and assign it to the variable that you created in step 1. You must cast the handler object to the type of the source page class.

frmSource = (Form1) Context.Handler;

3. Get the property values from the source page and use them as you would any object properties.

[ Form2.aspx.vb ]

lblFName.InnerText = frmSource.FirstName ;
lblLName.InnerText= frmSource.LastName;
lblAdd1.InnerText= frmSource.Address1 ;
lblAdd2.InnerText= frmSource.Address2;

[ Form3.aspx.vb ] : By using NameValueCollection : The Form property of Request object returns a NameValueCollection representing a collection of form variables. You can access value of any form field by its Id like userData["txtFName"].The NameValueCollection class is a member of System.Collections.Specialized namespace.

NameValueCollection userData = frmSource.UserData;
lblFName.InnerText = userData["txtFName"];
lblLName.InnerText= userData["txtLName"];
lblAdd1.InnerText= userData["txtAdd1"];
lblAdd2.InnerText= userData["txtAdd2"]; 

Reference: MSDN January 2006