Introduction
Often you need to pass variable content between your html pages or aspx
webforms in context of Asp.Net. For example in first page you collect
information about your client, her name and last name and use this information
in your second page.
For passing variables content between pages ASP.NET gives us several choices.
One choice is using QueryString
property of Request
Object. When surfing internet you should have seen weird internet address
such as one below.
http://www.localhost.com/Webform2.aspx?name=Atilla&lastName=Ozgur
This html addresses use QueryString
property to pass values
between pages. In this address you send 3 information.
- Webform2.aspx this is the page your browser will go.
name=Atilla
you send a name variable which is set to Atilla
lastName=Ozgur
you send a lastName variable which is
set to Ozgur
As you have guessed ? starts your QueryString
, and & is used
between variables. Building such a query string in Asp.Net is very easy. Our
first form will have 2 textboxes and one submit button.
Put this code to your submit button event handler.
private void btnSubmit_Click(object sender, System.EventArgs e)
{
Response.Redirect("Webform2.aspx?Name=" +
this.txtName.Text + "&LastName=" +
this.txtLastName.Text);
}
Our first code part builds a query string for your application and send
contents of your textboxes to second page. Now how to retrieve this values from
second page. Put this code to second page page_load
.
private void Page_Load(object sender, System.EventArgs e)
{
this.txtBox1.Text = Request.QueryString["Name"];
this.txtBox2.Text = Request.QueryString["LastName"];
}
Request.QueryString
is overloaded with a second way. You can
also retrieve this values using their position in the querystring. There is a
little trick here. If your QueryString
is not properly built
Asp.Net will give error.
private void Page_Load(object sender,
System.EventArgs e)
{
this.txtBox1.Text = Request.QueryString[0];
this.txtBox2.Text = Request.QueryString[1];
}
Some other ways to reach contents of QueryString
.
foreach( string s in Request.QueryString)
{
Response.Write(Request.QueryString[s]);
}
Or
for (int i =0;i < Request.QueryString.Count;i++)
{
Response.Write(Request.QueryString[i]);
}
Advantages of this approach
- It is very easy.
Disadvantages of this approach
QueryString
have a max length, If you have to send a lot
information this approach does not work.
QueryString
is visible in your address part of your browser so
you should not use it with sensitive information.
QueryString
can not be used to send & and space characters.
If you write this code and try them you will see that you have a problems
with space and & characters, e.g. if you need to send a variable which
contains & such as "Mark & Spencer". There must be a solution for this
problem. If you look to Google�s query string you will see that it contains a
lot of %20. This is the solution of our third disadvantage. Replace space with
%20 and & with %26 for example.
private void btnSubmit_Click(object sender, System.EventArgs e)
{
string p1 = this.txtName.Text.Replace("&","%26");
p1 = this.txtName.Text.Replace(" ","%20");
string p2 = this.txtLastName.Text.Replace("&","%26");
p2 = this.txtName.Text.Replace(" ","%20");
"WebForm2.aspx?" +
"Name=" + p1 +
"&LastName=" + p2;
Response.Redirect(p2);
}
Since this is a such a common problem Asp.Net should have some way to solve.
There it is Server.UrlEncode
. Server.UrlEncode
method
changes your query strings to so that they will not create problems.
private void btnSubmit_Click(object sender, System.EventArgs e)
{
Response.Redirect("WebForm2.Aspx?" +
"Name=" + Server.UrlEncode(this.txtName.Text) +
"&LastName=" + Server.UrlEncode(this.txtLastName.Text));
}
Same solution is in Microsoft .Net Quick Start tutorials.
ASP.NET --- Working with Web Controls ---
--- Performing Page Navigation (Scenario 1) ---
--- Performing Page
Navigation (Scenario 2) ---
Look at them also if you want to see more example for this technique. Also I
advise you to look at Alex Beynenson's article about building
QueryString
(s).