2008-09-06 13 views
3

Ich bin ein benutzerdefiniertes Steuerelement implementieren und in diesem Steuerelement muss ich eine Reihe von Links auf die aktuelle Seite schreiben, jeder mit einem anderen Abfrageparameter. Ich brauche bestehenden Query-String intakt zu halten, und fügen Sie (oder den Wert ändern) ein zusätzliches Abfrageelement (zB „Seite“.):UserControl Rendering: Link zur aktuellen Seite schreiben?

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

usw.

Gibt es eine einfache Methode, die Helfer ich kann in der Render-Methode verwenden ... uhmm ... wie:

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

, die Pflege braucht eine korrekte URL zu generieren, pflegen bestehende Query-String-Elemente und keine Duplikate zB erstellen. Seite = 1 & Seite = 2 & Seite = 3?

Das Aufrollen meiner eigenen scheint so eine unangenehme Aufgabe.

Antwort

1

Ich fürchte, ich weiß nicht, jeder integrierte Methode hierfür nutzen wir diese Methode, die die Abfragezeichenfolgeflag und setzt Parameter

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

Offensichtlich nimmt könnten Sie die Abfrage-Zeichenfolge NameValueCollection Eigenschaft der Verwendung URI-Objekt, um das Nachschlagen der Werte zu erleichtern, aber wir wollten in der Lage sein, jeden Querystring zu parsen.

0

Oh, und wir haben diese Methode auch, dass Sie in einer ganzen URL-Zeichenfolge setzen kann, ohne sie aus dem Abfragezeichenfolgeflag zu erhalten, die

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); 
} 
Verwandte Themen