1

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

不用担心路由,我可能只在查询字符串中添加每个:

/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 路径,则不清楚如何创建这些路由而不只是为我想要的所有组合重复它们(状态、无类别、日期、状态、无类别、无日期、无状态、类别、日期等)

4

2 回答 2

1

我认为查询参数版本适用于 MVC。可能让您感到困惑的是,当您想为用户提供特定订单的页面时,您确实将其order_id放入页面中。因此,在传统网站中,您只需创建该 URL

/order.html?order_id=1234

(或其他),使用你想使用的 MVC

/orders/1234

反而。不同之处在于,您只想在 URL 中放置强制参数——没有页面会中断的参数;不是每个参数。您不能返回没有订单 ID 的订单页面,因此它会出现在 URL 中。

您可以在一个页面上同时拥有这两者;举一个愚蠢的例子,如果你有一个订单的运输跟踪页面,你可以有一个类似的 URL

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

仅显示自上午 9:00 以来的跟踪事件(到达、离开)。

于 2013-03-20T02:38:24.183 回答
0

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

于 2013-03-14T04:29:28.410 回答