0

这更像是一个悬而未决的问题。您对 URL 中的查询字符串有何看法?在 ASP.NET MVC 中创建站点时,您会花费大量时间来考虑和制作干净的 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/

这使用了一条包罗万象的路线来在过滤部分之后抓取本质上是替换查询字符串。工作得很好,但在提交表单时会崩溃。

我很想听听人们提出了哪些其他解决方案?有很多关于干净 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}/

这值得努力吗?

谢谢,

4

3 回答 3

2

我个人的观点是,如果用户可能想要添加书签或将 URL 传递给其他人,那么一个漂亮、干净的“友好” URL 就是要走的路。从美学上讲,它们要好得多。对于简单的分页和排序,重写 URL 是一个好主意。

但是,对于具有大量临时、动态字段(例如搜索)的页面,我认为简单的查询字符串就可以了。同样,对于在未来使用完全相同的 URL 的情况下内容可能会发生显着变化的页面也是如此。在这些情况下,带有查询字符串的 URL 很好,甚至可能更可取,因为它们至少向细心的用户表明该页面是动态的。但是,在这些情况下,最好使用表单 POST 变量,无论如何,这样访问者就不会试图“摆弄”这些值。

于 2009-08-07T12:15:20.030 回答
2

除了其他人所说的之外,URL 还暗示了一种语义层次结构。无论今天是否属实,祖先是目录,人们仍然认为它是这样的。这就是为什么你有控制器/动作/id。同样,对我来说,查询字符串意味着选项或查询。

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

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

例如/搜索/国家/州/城市

但是,一旦您开始了解价格和类型,或者必须在“目录”前加上值类型(例如 /prices=50.00/ 或更糟,使用数组),那么您就失去了我。

事实上,如果所有元素都填满,那么您真正所做的就是获取查询字符串,将“&”替换为“/”,并将您的数组组合成一个字段。

如果您仍然要编写 javascript,为什么不直接遍历表单元素并:

  1. 删除空的,从“&price_low=&price_high=&”之类的东西中清理查询字符串。
  2. 将多个值组合成一个数组结构

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

詹姆士

于 2009-08-07T13:13:41.183 回答
0

FormsCollection 中的不同字段的值是否在发布时不可用?

于 2009-08-07T12:10:59.110 回答