2

状況:- 一意のユーザー ("userName" 変数) が開くことができる Home.aspx ページがあります。

このページには、ポップアップ ウィンドウ コントロール名「alertWindow」があります。

Home.aspx.cs の pageLoad イベントでは、NavigateUrl プロパティを使用して「alertWindow」で Welcome.aspx ページが開かれます。

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" のみを正しく取得します。

要件:- あらゆる種類の「userName」文字列値について、Request["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 はまさにそれを行います。

2 つのメモ。

  1. リクエストに依存しないため、UrlEncode を呼び出すことを選択します。またServer、スレッド内で使用したり、ページから呼び出されない関数を使用したりできます。
  2. Request.QueryStringあなたがそれを使うときは、make UrlDecode 。エンコード URL を取得するには、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 に答える