asp.net URL传值出现错误解决_[Asp.Net教程]                                           
    最近在asp.net编程中发现一个问题,如果用URL从一个页面传递字符串到另一个页面,会出现传递的字符串比如是“DK51+700中继站”;可是另一个页面接收到字符串却是:“DK51 700中继口”;加号变成了空格,“站”不能解析出来,变成了不能识别的符号“口”的情况。 
    经网上查询发现原因主要是,URL中有些字符被转义,象空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格。如果按照网上的建议,应该对要传递的参数进行编码处理。于是,我对传递的参数进行了处理,但是又衍生了一堆问题出来;我当时为了节约时间,就没有仔细研究,用了字符串中的Replace()方法在传送前代替了这两个字符,接收到了再代替回来。现在我来具体的展示下这个问题。 
  1.首先,我们先看下我的开始的问题(环境:VS2008): 
  1.1. 新建一个网站,在其中添加一个页面,一个页面是Defaul.aspx,另一个网页Defaul2.aspx,在第一个页面中添加一个控件:HyperLink1;  
  后台代码:  
public partial class _Default : System.Web.UI.Page 
{ 
  protected void Page_Load(object sender, EventArgs e) 
  { 
    string url; 
    string name; 
    url = "Default2.aspx?Name="; 
    name = "DK51+700中继站"; 
    HyperLink1.NavigateUrl = url + name; 
  } 
}
  1.2. 在第二个页面中添加一个Label控件Label1; 
  后台代码: 
public partial class Default2 : System.Web.UI.Page 
{ 
  protected void Page_Load(object sender, EventArgs e) 
  { 
    string name = Request.QueryString["Name"]; 
    Label1.Text = name; 
  } 
}
      1.3. 结果显示:“DK51 700中继口”。 
public partial class _Default : System.Web.UI.Page 
{ 
  protected void Page_Load(object sender, EventArgs e) 
  { 
    string url; 
    string name; 
    url = "Default2.aspx?Name="; 
    name = "DK51+700中继站"; 
    name = name.Replace("+", "@"); 
    name = name.Replace("站", "%"); 
    HyperLink1.NavigateUrl = url + name; 
  } 
} 
  2.我当时的解决方法:用了字符串中的Replace()方法在传送前代替了这两个字符,接收到了再代替回来。 
  2.1第一个页面的后台代码: 
public partial class _Default : System.Web.UI.Page 
{ 
  protected void Page_Load(object sender, EventArgs e) 
  { 
    string url; 
    string name; 
    url = "Default2.aspx?Name="; 
    name = "DK51+700中继站"; 
    name = name.Replace("+", "@"); 
    name = name.Replace("站", "%"); 
    HyperLink1.NavigateUrl = url + name; 
  } 
}
       2.2.第二个页面中,后台代码:
public partial class Default2 : System.Web.UI.Page 
{ 
  protected void Page_Load(object sender, EventArgs e) 
{ 
  string name = Request.QueryString["Name"]; 
    name = name.Replace("@", "+"); 
    name = name.Replace("%", "站"); 
    Label1.Text = name; 
  } 
}
   2.3.结果是:“DK51+700中继站”。正确! 
  后来我在网上找到这个这样的设置,在Web.config中设置: