19

ASP.NETページのコンテキスト内で、Request.QueryStringを使用して、URIのクエリ文字列部分のキーと値のペアのコレクションを取得できます。

たとえば、を使用してページを読み込むhttp://local/Default.aspx?test=valueと、次のコードを呼び出すことができます。

//http://local/Default.aspx?test=value

protected void Page_Load(object sender, EventArgs e)
{
    string value = Request.QueryString["test"]; // == "value"
}

理想的には、テストが存在するかどうかを確認することです。これにより、を使用してページを呼び出しhttp://local/Default.aspx?test、クエリ文字列にテストが存在するかどうかを示すブール値を取得できます。このようなもの:

//http://local/Default.aspx?test

protected void Page_Load(object sender, EventArgs e)
{
    bool testExists = Request.QueryString.HasKey("test"); // == True
}

したがって、理想的には、テスト変数が文字列に存在するかどうかを示すブール値が必要です。

正規表現を使用して文字列をチェックすることもできると思いますが、もっとエレガントな解決策があるかどうか知りたいと思いました。

私は次のことを試しました:

//http://local/Default.aspx?test

Request.QueryString.AllKeys.Contains("test"); // == False  (Should be true)
Request.QueryString.Keys[0];                  // == null   (Should be "test")
Request.QueryString.GetKey(0);                // == null   (Should be "test")

この動作は、たとえば、PHPとは異なります。

$testExists = isset($_REQUEST['test']); // == True
4

6 に答える 6

27

Request.QueryString.GetValues(null)値のないキーのリストを取得します

Request.QueryString.GetValues(null).Contains("test")trueを返します

于 2013-02-15T19:50:56.777 に答える
5

このタスクを解決するための拡張メソッドを作成しました。

public static bool ContainsKey(this NameValueCollection collection, string key)
{
    if (collection.AllKeys.Contains(key)) 
        return true;

     // ReSharper disable once AssignNullToNotNullAttribute
    var keysWithoutValues = collection.GetValues(null);
    return keysWithoutValues != null && keysWithoutValues.Contains(key);
}
于 2013-10-10T11:21:18.963 に答える
2

Request.QueryStringはですがNameValueCollection、クエリ文字列が通常の形式の場合にのみアイテムが追加され[name=value]*ます。そうでない場合は、空です。

あなたQueryStringがその形を?test=valueしているなら、あなたがRequest.QueryString.AllKeys.Contains("test")望むことをするでしょう。そうしないと、で文字列操作を実行できなくなりますRequest.Url.Query

于 2013-02-15T19:46:40.733 に答える
2

これを使います。

if (Request.Params["test"] != null)
{
    //Is Set
}
else if(Request.QueryString.GetValues(null) != null && 
       Array.IndexOf(Request.QueryString.GetValues(null),"test") > -1)
{
    //Not set
}
else
{
    //Does not exist
}
于 2016-01-14T17:53:35.377 に答える
1

これを試してみてください、それは私の問題を解決しました!クエリ文字列に値があるか空であるかをカウントし、キーを使用して必要なクエリ文字列値を確認できます。

  if (!Page.IsPostBack)
        {
           if (Request.QueryString.Count > 0)
            {
                if (Request.QueryString["departmentId"] != null)
                {
                    GetSurveyByDeptAndStatus(departmentId: Request.QueryString["departmentId"], status: "Not Surveyed");
                    rbListEmpsSurvey.Items[1].Selected = true;
                }

                else if (Request.QueryString["SurveyStatus"] != null)
                {
                    SatisfactionStatus = Request.QueryString["SurveyStatus"] "";
                    GetSurveyByDeptAndStatus(status: SatisfactionStatus);
                    GetDepartments();
                }}}
于 2021-02-18T10:37:55.583 に答える
-2
Request.QueryString.ToString().Contains("test")

これは、単一のクエリ文字列パラメータを探している特別な場合に機能します。MyFile.aspx?test

より複雑で一般的なケースの場合は、他のソリューションの方が適しています。

于 2013-11-01T18:13:09.947 に答える