Saturday, February 28, 2015

Querystrings in ASP.Net with examples

Introduction

When ever you want to pass variable data between your html pages or ASP.Net webforms.

For example in first page you collect information about your client, his/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.
https://www.google.co.in/webhp?sourceid=chrome-instant&rlz=1C1CHWA_enIN608IN608&ion=1&espv=2

This html addresses use QueryString property to pass values between pages. In this address you send 3 information.
  1. www.google.co.in/webhp this is the page your browser will go.
  2. sourceid=chrome-instant 
  3. rlz=1C1CHWA_enIN608IN608 
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


  1. It is very easy.



Disadvantages of this approach


  1. QueryString have a max length, If you have to send a lot information this approach does not work.

  2. QueryString is visible in your address part of your browser so you should not use it with sensitive information.

  3. 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));
}




Now over to you:


"A blog is nothing without reader's feedback and comments. So please provide your valuable feedback so that i can make this blog better and If you like my work; you can appreciate by leaving your comments. Stay tuned and stay connected for more technical updates."


No comments:

Post a Comment