【问题标题】:Dynamic URL management with javascript使用 javascript 进行动态 URL 管理
【发布时间】:2009-08-25 12:31:29
【问题描述】:

我有一个搜索页面,允许用户根据特定集合中的条件进一步过滤他们的结果。

您通过搜索“标签”中的所有项目来开始搜索。为此创建的 URL 如下所示

搜索/索引?tag=TagA

在页面上有一个标签列表,这些标签也在这个结果集中。

我想要的是在这个标签列表中生成的 URL 是

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

仅仅附加到 URL 上是不够的,因为还会添加其他参数,例如页码和其他搜索条件(为简洁起见,我没有包括它们)

我知道我可能会在服务器端破解它,但没有什么感觉很优雅,我想知道是否有一个巧妙的解决方案。

这一切都是在 ASP MVC 中完成的,因此我有一个很好的简单局部视图来列出这些标签:

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

有什么想法吗?

【问题讨论】:

    标签: javascript asp.net-mvc url


    【解决方案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;
            }
    

    用法如下:

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

    如果您想涉及 javascript,您可能需要查看 this jQuery plugin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-02
      • 2014-09-04
      • 2019-12-27
      • 1970-01-01
      • 2018-08-07
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多