2009-08-07 99 views
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已经涵盖的基本的宁静的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}/ 

这是否值得努力?

感谢,

+1

“半打文本字段和两个或复选框和选择的三个列表相当简单的搜索页面。” Google的搜索表单“非常简单”。这个很复杂。在这种情况下,它可以产生一个复杂的URI。 – 2009-08-07 12:48:26

回答

2

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

但是,对于具有大数的临时动态字段(如搜索)的页面,我认为谦虚的查询字符串没有问题。就像明智的页面,其内容可能会改变显着给予未来完全相同的URL。在这些情况下,使用查询字符串的URL很好,甚至可能更好,因为它们至少向observant用户指示该页面是动态的。但是,在这些情况下,使用表单POST变量可能会更好,无论如何,访问者不会试图用这些值“摆弄”。

0

不是不同领域的可在FormsCollection值反正在后?

+1

是的,他们是这只是他们如何显示在地址栏中。同样为了搜索,最好使用GET来搜索表单,以便它们可以被书签。 – madcapnmckay 2009-08-07 12:31:26

+0

好点。我想你可以将querystrings编译成某种你可以更容易引用的结构? - – 2009-08-07 12:39:42

2

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

个人而言,我认为重写网址是最好的,当你不知道它是否有一个解释器 - 也许它只是一个生成的HTML文件?

所以,不管你选择这么做(这在客户中是一种搜索形式的痛苦 - 我会说更麻烦,而不是价值),我会支持你为层次结构做这件事。

E.g./搜索/国家/州/市

但是一旦你开始考虑价格和类型,或者不得不用一个数值类型(例如/prices=50.00/或更糟糕的数组) ,那就是你失去了我的地方。实际上,如果所有元素都被填充,那么你真正完成的所有操作都是使用查询字符串,用“/”替换“&”,然后将你的数组组合到一个字段中。

如果你将要反正编写的代码,你为什么不只是通过表单元素和循环:

  1. 取出空的,从清理查询字符串“& price_low的= “& price_high = &”各种各样的东西。
  2. 将多个值到一个数组结构

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

詹姆斯