2013-03-11 51 views
1

假设我有要显示的订单列表。我想让用户能够显示所有订单,来自某个特定状态的所有订单以及来自特定类别的所有订单。这些中的每一个都可以按日期范围进行过滤。使用MVC设计网址

无需担心布线,我可能只是添加的每个查询字符串:

/orders?State=TX&Category=Books&DateRange=Yesterday 

虽然我可以很容易地完成这项工作,它没有“感觉”像这样是正确的MVC路做事。

我可以有一个看起来像这样的路线:

/orders/    
/orders/state/{state} 
/orders/category/{category} 
/orders/state/{state}/category/{category}/ 
/orders/state/{state}/category/{category}/Date/{date-range} 

但我还是要支持的每台那些不在那里过滤器。有没有更好的方法来处理这个问题,还是我只是在想整个事情?

如果我去只有URL的路径,我不清楚我将如何创建这些路线,而不是仅仅为所有我想要的组合重复它们(状态,没有类别,日期,状态,没有类别,没有日期,没有状态,类别,日期等)

回答

0

实际上,在查询参数中保留搜索/过滤器选项实际上是一种常见做法,例如在google上查看。
从我的角度来看,除非您关心过滤结果上的seo,或者希望为此页面设置人性化的网址,否则支持任何可能的过滤器的路由都毫无意义。

1

我认为查询参数版本适用于MVC。可能让您感到困惑的是,当您想为用户提供特定订单的页面时,您确实在页面中输入了order_id。那么,在传统的网站,你只是使URL

/order.html?order_id=1234 

(或其他),与MVC要使用

/orders/1234 

代替。不同之处在于,您只需要在网址中添加强制性参数---页面不会破坏的参数;不是每个参数。如果没有订单编号,则无法返回订单页面,因此会进入该网址。

您可以同时在一个页面上;对于一个愚蠢的例子,如果你有一个航运跟踪页面为一个订单,你可以像

/orders/1234/tracking?since=9%3a00 

一个URL,只显示跟踪事件(到达,离开时),因为上午9:00。