42

我有一个页面,就像/Comments/Search/3我搜索并显示线程“3”的所有评论一样。

我正在添加一个排序功能(按日期、作者等)。处理它的最佳方法是什么?/Comments/Search/3/Sort/Author还是/Comments/Search/3?sort=author

如何自动处理查询字符串 sort=author 作为 MVC 中的参数?

谢谢

4

3 回答 3

59

我更喜欢:/Comments/Search/3?sort=author。查询字符串是传入编程参数的好地方,特别是如果参数(如本例中)对于 SEO 目的并不重要。如果该参数作为搜索词具有某种语义含义,则第一个 URL 会更好。

在控制器方法中,您可以使用如下内容:

public ActionResult Search(int id, string sort)

ASP.NET MVC 会自动将查询字符串值连接到方法的参数。

使用以下路线

routes.MapRoute(
                   "Default",                                              // Route name
                   "{controller}/{action}/{id}",                           // URL with parameters
                   new { controller = "Comments", action = "Search", id = "" }  // Parameter defaults
               );

/Comments/Search/3?sort=author 将调用 Search(3, "author")

/Comments/Search/3 将调用 Search(3, null)

请记住,id 是强制性的,因此此 url 将失败:/Comments/Search

于 2009-06-09T08:48:19.287 回答
20

ASP.NET MVC 将在查询字符串的情况下自动处理。您只需为您的操作添加一个string sort参数。

哪个更好?就个人而言,我使用路径来控制正在显示的内容,并使用查询字符串来控制演示(如何显示、格式化……)。因此,对于排序,我会使用 querystring 方法。但我认为这两种方法都没有技术劣势。

于 2009-06-09T08:48:06.180 回答
2

你最好的办法是添加一个路由规则来处理它。这里有一篇方便的文章:

http://aspalliance.com/1525_ASPNET_MVC_Framework_Part_2_URL_Routing.2

然后您的 URL 将显示为 /Comments/Search/3/Sort/Author

于 2009-06-09T08:48:59.377 回答