2

情况:- 有一个 Home.aspx 页面,可由唯一用户(“userName”变量)打开。

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

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

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

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

问题:- 当登录用户的名称包含空格或其他非常用字符时,“Request["UserName"].ToString()” 不会检索到实际和正确的值。

对于前。如果登录的 "userName" = "A&T Telecom",则 "Request["UserName"].ToString() 仅检索 "A" 而没有其他内容。

但是如果 userName 字符串是像“micheal”这样的正确值,那么“Request[”UserName”].ToString() 只会正确检索“Micheal”

要求:- 请提供一种方法,以便我从 Request["UserName"] 获取任何类型的“userName”字符串值的正确值。

主页.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();
4

2 回答 2

3

这是合乎逻辑的,因为您不编码您的 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
于 2013-03-13T14:08:21.100 回答
1

您不能在 url 中添加空格,它需要编码:

//uses HttpUtility.UrlEncode internally

Server.UrlEncode("something with spaces");

或者

HttpUtility.UrlEncode("something with spaces");
于 2013-03-13T14:16:46.363 回答