代码之家  ›  专栏  ›  技术社区  ›  madcapnmckay

清除查询字符串

  •  0
  • madcapnmckay  · 技术社区  · 17 年前

    这更是一个悬而未决的问题。您对URL中的查询字符串有何看法?在ASP.NET MVC中创建网站时,您花费了大量的时间来考虑和制作干净的URL,而这些URL只有在第一次使用查询字符串时才会被破坏,尤其是在搜索表单上。

    例如,我最近做了一个相当简单的搜索表单,其中有六个文本字段和两三个复选框和选择列表。这在提交时生成了下面的查询字符串

    countrylcid=2057&State=England&StateId=46&Where=&DateFrom=&DateTo=&Tags=&Keywords=&Types
    =1&Types=0&Types=2&Types=3&Types=4&Types=5&Costs=0.0-9.99&Costs=10.00-29.99&Costs=30.00-59.99&Costs=60.00-10000.00
    

    漂亮,我想你会同意的。一半的字段中没有信息,列表输入确实非常详细。

    不久前,我为分页实现了一个简单的解决方案,它生成了一个URL,例如

    www.yourdomain.com/browse/filter-on/page-1/perpage-50/
    

    这使用了一个catchall路由来获取基本上是过滤后的替换查询字符串。工作得很好,但是在提交表单时会崩溃。

    我很想听听人们想出了什么其他的解决办法?有很多关于干净的URL的文章,但都是针对ASP.NET开发人员的,他们创建了MVC已经介绍过的基本RESTful URL。我有一半考虑深入模型绑定,以沿着这些线生成适当的解决方案。根据上述约定,可以将大型查询字符串重写为:

    filter-on/countrylcid-2057/state-England/stateId-46/types-{1,0,2,3,4,5}/costs-{0.0-9.99,10.00-29.99,30.00-59.99,60.00-10000.00}/
    

    这值得付出努力吗?

    谢谢,

    3 回复  |  直到 17 年前
        1
  •  2
  •   Dan Diplo    17 年前

    我个人的观点是,如果用户希望将URL添加到书签或传递给其他人,那么一个好的、干净的“友好”的URL就是解决之道。从美学上讲,它们更漂亮。对于简单的分页和排序,最好是重新编写一个URL。

    但是,对于具有 大数 对于临时的、动态的字段(如搜索),我认为简单的查询字符串是可以的。对于内容可能发生变化的页面来说,这是明智之举。 明显地 在将来提供完全相同的URL。在这些情况下,带有查询字符串的URL很好,甚至可能更好,因为它们至少向观察者用户表明页面是动态的。然而,在这些情况下,使用表单发布变量可能更好,无论如何,这样访问者就不会被诱惑去“摆弄”这些值。

        2
  •  2
  •   James S    17 年前

    除了其他人所说的之外,URL还意味着语义层次结构。不管今天是不是真的,祖先都是目录,人们仍然这样认为。这就是为什么您有控制器/操作/id。同样,对我来说,查询字符串意味着选项或查询。

    就我个人而言,我认为当你不知道是否有一个解释器在背后时,重写的URL是最好的——也许它只是一个生成的HTML文件?

    因此,无论您选择这样做(这对搜索表单中的客户机来说是一种痛苦——我想说的是麻烦比它的价值还多),我都会支持您在层次结构中这样做。

    例如/search/country/state/city

    但是一旦你开始了解价格和类型,或者不得不在“目录”前面加上值的类型(例如,/prices=50.00/或者更糟的是,加上一个数组),那就是你失去我的地方。

    实际上,如果填充了所有元素,那么您真正要做的就是使用querystring,将“&”替换为“/”,并将数组组合成一个字段。

    如果您无论如何都要编写JavaScript,那么为什么不循环使用表单元素,并:

    1. 删除空的,从“&price\u low=&price\u high=&sorts”中清除查询字符串。
    2. 将多个值组合到数组结构中

    但随后作为查询字符串提交。

    詹姆斯

        3
  •  0
  •   Tristan Warner-Smith    17 年前

    在formscollection中,不同字段的值在post中是否仍然可用?