2009-08-25 7 views
0

私は、特定のセット内の基準に基づいてユーザーがさらに結果をフィルタリングできるようにする検索ページを用意しています。JavaScriptを使用した動的URL管理

「タグ」内のすべての項目を検索することで検索を開始します。このために作成されたURLは

検索/インデックスのように見えるのでしょうか?ページでタグ=多賀

この結果セットでもあるタグのリストがあります。

は、私が欲しいのは生成されたURLの他のパラメータは、ページ番号やその他の検索条件として追加があるだろうとして、それはちょうどURLに追加することは十分ではありません

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

をしているタグのリストでそうです(私は簡潔にするためにそれらを含めていません)

私は恐らくサーバー側でこれをハックすることができますが、何も非常に優雅に感じることができないと私はこれのためのきちんとした解決策があるのだろうかと思っていた。

これは、すべてのASP MVCで、私はこれらのタグを一覧表示するにはすてきな簡単な部分図を持っているように行われる:

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

任意のアイデア?

答えて

1

これは格好良いコードではありませんが、それはあなたのアイデアを与えるかもしれない:

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

使い方次のようになります。あなたはJavaScriptを巻き込むしたい場合は、あなたがしたい場合があります

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

this jQuery pluginをチェックしてください。

+0

これは適切なトラックで感謝しています:) – qui

関連する問題