+ sign has a semantic meaning in the query string. It is used to represent a space.Most server side scripts would decode the query parameters before using them, so that a + gets properly converted to a space. Now, if you want a literal + to be present in the query string, you need to specify %2B instead. Because + sign in the query string is URL-decoded to a space. %2B in the query string is URL-decoded to a + sign.
So in my form1 I have a button.
<asp:Button ID="btnRedirect" runat="server" OnClick="btnRedirect_Click" Text="Redirect" />
While clicking on the button I am redirecting to new page with as query string. Since my querystring as + symbol I am repacing it with %2B and encoding it before passing in the query string. Below is the code
protected void btnRedirect_Click(object sender, EventArgs e)
signature = signature.Replace("+", "%2B");
Response.Redirect("Encode-Decode-QueryString.aspx?sign=" + Server.UrlEncode(signature));
Now in the page load of redirected page I am decoding the querystring and displaying in a label.
protected void Page_Load(object sender, EventArgs e)
string sign = Request["sign"] + "";
lblSignature.Text = Server.UrlDecode(sign);
It works fine . Hope it will help you.