我有一个页面,就像/Comments/Search/3
我搜索并显示线程“3”的所有评论一样。
我正在添加一个排序功能(按日期、作者等)。处理它的最佳方法是什么?/Comments/Search/3/Sort/Author
还是/Comments/Search/3?sort=author
?
如何自动处理查询字符串 sort=author 作为 MVC 中的参数?
谢谢
我有一个页面,就像/Comments/Search/3
我搜索并显示线程“3”的所有评论一样。
我正在添加一个排序功能(按日期、作者等)。处理它的最佳方法是什么?/Comments/Search/3/Sort/Author
还是/Comments/Search/3?sort=author
?
如何自动处理查询字符串 sort=author 作为 MVC 中的参数?
谢谢
我更喜欢:/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
ASP.NET MVC 将在查询字符串的情况下自动处理。您只需为您的操作添加一个string sort
参数。
哪个更好?就个人而言,我使用路径来控制正在显示的内容,并使用查询字符串来控制演示(如何显示、格式化……)。因此,对于排序,我会使用 querystring 方法。但我认为这两种方法都没有技术劣势。
你最好的办法是添加一个路由规则来处理它。这里有一篇方便的文章:
http://aspalliance.com/1525_ASPNET_MVC_Framework_Part_2_URL_Routing.2
然后您的 URL 将显示为 /Comments/Search/3/Sort/Author