3

カスタム コントロールを実装しています。このコントロールでは、現在のページへのリンクを多数作成する必要があります。それぞれに異なるクエリ パラメータを指定します。既存のクエリ文字列をそのまま維持し、追加のクエリ項目 (「ページ」など) を追加 (または値を変更) する必要があります。

"Default.aspx?page=1"
"Default.aspx?page=2"
"Default.aspx?someother=true&page=2"

Render メソッドで使用できる単純なヘルパー メソッドはありますか...うーん...次のように:

Page.ClientScript.SomeURLBuilderMethodHere(this,"page","1");
Page.ClientScript.SomeURLBuilderMethodHere(this,"page","2");

これにより、正しい URL が生成され、既存のクエリ文字列項目が維持され、重複が作成されなくなります。ページ=1&ページ=2&ページ=3?

自分自身を巻き上げるのは、魅力のない仕事のように思えます。

4

2 に答える 2

1

申し訳ありませんが、このための組み込みメソッドを知りません。クエリ文字列を取得してパラメーターを設定するこのメソッドを使用します

    /// <summary>
    /// Set a parameter value in a query string. If the parameter is not found in the passed in query string,
    /// it is added to the end of the query string
    /// </summary>
    /// <param name="queryString">The query string that is to be manipulated</param>
    /// <param name="paramName">The name of the parameter</param>
    /// <param name="paramValue">The value that the parameter is to be set to</param>
    /// <returns>The query string with the parameter set to the new value.</returns>
    public static string SetParameter(string queryString, string paramName, object paramValue)
    {
        //create the regex
        //match paramname=*
        //string regex = String.Format(@"{0}=[^&]*", paramName);
        string regex = @"([&?]{0,1})" + String.Format(@"({0}=[^&]*)", paramName);

        RegexOptions options = RegexOptions.RightToLeft;
        // Querystring has parameters...
        if (Regex.IsMatch(queryString, regex, options))
        {
            queryString = Regex.Replace(queryString, regex, String.Format("$1{0}={1}", paramName, paramValue));
        }
        else
        {
            // If no querystring just return the Parameter Key/Value
            if (queryString == String.Empty)
            {
                return String.Format("{0}={1}", paramName, paramValue);
            }
            else
            {
                // Append the new parameter key/value to the end of querystring
                queryString = String.Format("{0}&{1}={2}", queryString, paramName, paramValue);
            }
        }
        return queryString;
    }

明らかに、URI オブジェクトの QueryStringNameValueCollectionプロパティを使用して値を簡単に検索できますが、任意のクエリ文字列を解析できるようにする必要がありました。

于 2008-09-06T09:01:16.280 に答える
0

ああ、このメソッドもあり、クエリ文字列を取得せずに URL 文字列全体を入れることができます

public static string SetParameterInUrl(string url, string paramName, object paramValue)
{
    int queryStringIndex = url.IndexOf("?");
    string path;
    string queryString;
    if (queryStringIndex >= 0 && !url.EndsWith("?"))
    {
        path = url.Substring(0, queryStringIndex);
        queryString = url.Substring(queryStringIndex + 1);
    }
    else
    {
        path = url;
        queryString = string.Empty;
    }
    return path + "?" + SetParameter(queryString, paramName, paramValue);
}
于 2008-09-06T09:02:57.273 に答える