2008-09-06 23 views
3

我正在实现一个自定义控件,在这个控件中,我需要写一堆链接到当前页面,每个链接使用不同的查询参数。我需要保持现有的查询字符串完好,并添加(或修改的值)的额外的查询项目(如“页面”。):UserControl呈现:将链接写入当前页面?

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

有一个简单的辅助方法我可以在Render方法使用... ... uhmm像:

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

这将产生一个正确的URL的护理,保持现有的查询字符串的项目,而不是创建副本如。 page = 1 & page = 2 & page = 3?

滚动我自己似乎是这样一个没有吸引力的任务。

回答

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; 
    } 

显然,你可以使用的查询字符串NameValueCollection财产URI对象使查找值更容易,但我们希望能够解析任何查询字符串。

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); 
} 
相关问题