Http.Page.Request [“”]不能返回正确的值

问题描述:

情况: - 有一个Home.aspx页面,可以由一个唯一的用户(“userName”变量)打开。Http.Page.Request [“”]不能返回正确的值

此页面有一个弹出窗口控件名称'alertWindow'。

在Home.aspx.cs的pageLoad事件中,使用NavigateUrl属性在'alertWindow'中打开Welcome.aspx页面。

传递给Welcome.aspx页面的查询字符串包含一个参数“UserName”,该参数设置为登录用户的名称(“userName”变量)。

现在,当代码执行到Welcome.aspx.cs页面时,“Request [”UserName“]”用于获取查询字符串中存在的当前“userName”参数。

问题: - 当登录用户的名称有空格或其他非通常的字符,然后“请求[”用户名“]。的ToString()”不检索实际和正确的值。

For Ex。如果登录的“用户名”=“A电信”,然后“请求[”用户名“],ToString()只检索”A“,而不是其他任何东西

但是,如果userName字符串是一个适当的值“迈克尔”,然后选择“请求[”用户名“]。的ToString()只检索‘迈克尔’正确

要求: - 请提供一种方式让我得到请求的正确值”用户名“]用于任何种类的“userName”字符串值。

Home.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (user is valid) 
     alertWindow.NavigateUrl = "Welcome.aspx?userName=" + currentUser.ToString(); 
} 

Welcome.aspx.cs: -

currentUserName = Request["userName"].ToString(); 

这是合乎逻辑的,因为你不Encode your url。试试这个:

alertWindow.NavigateUrl = "Welcome.aspx?userName=" + Server.UrlEncode(currentUser.ToString()); 

要说几个,他们是在URL中使用,如

:/# ? & @ % + (and the space)一些特殊字符。

所有这些字符必须被编码为不同的格式,所以url不会中断,UrlEncode就是这样做的。

两个笔记。

  1. 我选择Server调用以UrlEncode,因为不是从请求依赖,你可以使用它的线程,或者未从页面调用的任何函数内。
  2. Request.QueryString当您使用UrlDecode时。为了让你调用Request.RawUrl
+1

总之很好的解释,在提到两个注释。非常感谢Aristos。 Soution工作。 – Kings 2013-03-13 17:00:22

你不能您的网址中添加空格编码的URL,它需要编码,以便:

//uses HttpUtility.UrlEncode internally 

Server.UrlEncode("something with spaces"); 

HttpUtility.UrlEncode("something with spaces");