2009-08-25 15 views
0

Ich habe eine Suchseite, die es Benutzern ermöglicht, ihre Ergebnisse basierend auf Kriterien innerhalb eines bestimmten Satzes weiter zu filtern.Dynamische URL-Verwaltung mit Javascript

Sie starten eine Suche, indem Sie nach allen Elementen innerhalb eines "Tags" suchen. Die URL für diese geschaffen würde aussehen wie

Suche/index? Tag = TagA

Auf der Seite gibt es eine Liste von Tags, die auch in dieser Ergebnismenge sind.

Was ich will, ist so in dieser Liste der Tags die URL erzeugt die sind

<a href="search/index?tag=TagA,TagB">TagB</a> 

Es ist nicht gut genug, nur auf die URL anhängen, wie es andere Parameter hinzugefügt werden, wie Seitenzahlen und anderen Suchkriterien (Ich habe sie der Kürze wegen nicht aufgenommen)

Ich bin mir bewusst, dass ich das wahrscheinlich auf der Server-Seite hacken könnte, aber nichts fühlt sich sehr elegant an und ich frage mich, ob es eine saubere Lösung dafür gab.

Dies alles ist in ASP MVC getan und als solche habe ich eine schöne einfache Teilansicht diese Tags zur Liste:

<%if(Model.Count()>0){ %>  
    <ul> 
    <%foreach(Tag t in Model){ %> 
     <li><%=t.name%></li> 
    <%} %> 
    </ul> 
<%} % 

Irgendwelche Ideen?

Antwort

1

Das ist nicht gut aussehender Code, aber es könnte Ihnen eine Idee geben:

public static string CurrentUrl 
     (this UrlHelper helper) 
    { 
     return GenerateUrl 
      (helper, GetParameters(helper), null, null); 
    } 

    public static string CurrentUrlWith 
     (this UrlHelper helper, string key, string value) 
    { 
     return GenerateUrl 
      (helper, GetParameters(helper), key, value); 
    } 



private static Dictionary<string, object> GetParameters 
      (UrlHelper helper) 
     { 
      var context = helper.RequestContext.HttpContext; 
      var request = context.Request; 
      var parameters = new Dictionary<string, object>(); 
      request.Form.CopyTo(parameters); 
      request.QueryString.CopyTo(parameters); 

      return parameters; 
     } 

     //TODO: refactor 
     private static string GenerateUrl 
      (UrlHelper helper, Dictionary<string, object> parameters, 
      string key, string value) 
     { 
      var context = helper.RequestContext.HttpContext; 
      var request = context.Request; 
      string query = "?", 
        url = request.FilePath; 

      foreach (var parameter in parameters) 
       if (parameter.Key != key) 
        query += string.Format("&{0}={1}", 
         helper.Encode(parameter.Key), 
         helper.Encode(parameter.Value.ToString())); 

      if (key != null && value != null) 
       query += string.Format("&{0}={1}", helper.Encode(key), helper.Encode(value)); 

      if (query.Length > 1) 
       query = query.Remove(1, 1); 

      return url + query; 
     } 

Verwendung sieht wie folgt aus:

<a href="<%= Url.CurrentUrlWith("page", (Model.TotalPages).ToString())%>" 
    class="p-last">Last page</a> 

Wenn Sie Javascript einbinden wollen, möchten Sie vielleicht Auschecken this jQuery plugin.

+0

Das hat mich auf den richtigen Weg gebracht, danke :) – qui