2008-09-06 17 views
3

Özel bir denetim uyguluyor ve bu denetimde, her biri farklı bir sorgu parametresi olan mevcut sayfaya bir grup bağlantı yazmam gerekiyor. Fazladan bir sorgu öğesi (örn. "Sayfa") bozulmamış mevcut sorgu dizesini tutmak ve eklemek (veya değerini değiştirmek) gerekir: Basit bir yardımcı yöntem var mıUserControl rendering: Geçerli sayfaya bağlantı yazılsın mı?

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

vb

o Ben Render yönteminde kullanabilirsiniz ... sanki ... uhmm: bir doğru URL'yi üreten ilgilenir

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

, mevcut sorgu dizesi öğeleri korumak ve örneğin çiftleri oluşturmaz. sayfa = 1 & sayfa = 2 & sayfa = 3?

Kendi başıma haddeleme yapmak bu kadar çekici olmayan bir görev gibi görünüyor.

cevap

1

ben bunun için herhangi bir dahili yöntemin bilmiyorum korkuyorum biz parametreler

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

sorgu dizesi alır ve ayarlar bu yöntemi kullanmak Açıkçası QueryString NameValueCollection özelliğini kullanabilirsiniz URI nesnesi, değerleri daha kolay görmek için uğraşıyordu, ama herhangi bir sorgulamayı ayrıştırmak istedik.

0

Oh ve biz de o size

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); 
} 
bunun dışında sorgu dizesi almak zorunda kalmadan bütün bir URL dizesi koymak sağlayan bu yöntemi var