在我的页面中,我将多个值传递给控制器。
我的网址类似于: http://blah/Search/Page/?type=new&keywords=blahblah&sortType=Date
在MVC中传递多个值作为查询字符串的良好实践吗?或者我们可以使用引入自定义路由来斜杠分隔URL?
注意:让我们考虑查询字符串中的所有值,不是安全/敏感数据。
答案 0 :(得分:2)
我不认为这是一种不好的做法,只要它不是感性数据。这取决于您是否要在global.asax中编写自定义路由来处理它。自定义路线提供更清晰的网址。此外,对于更多精明的用户,如果他们了解您网站上的概念,则更直观。
所以考虑一下:
http://baseballcards/topps/1980 // search for baseball cards made by topps in the 1980s
http://recipes/deserts/pies // search for a desert recipe that are pies
http://code/csharpe/linq // search for csharp code that has linq examples
在这些示例中,我们几乎可以像句子一样阅读网址,使其更直观,让用户能够即插即用。它清楚地表示查询几乎就像一个面包屑,准确地表明了上下文的内容。我个人喜欢这个。但无论哪种方式都是一种很好的方法。
使用更多参数进行扩展:
routes.MapRoute(
"SearchRecipes",
"Search/Recipes/{category}/{type}",
new { controller = "Search", action = "Recipes", category = "all" , type = ""}
);
一些例子:
Search/Recipes/Deserts/Pie
Search/Recipes/Dinner/Beef
Search/Recipes/Lunch/Salads
答案 1 :(得分:1)
稍后选择(路由值中的查询字符串),以防
否则这两种方法都是平等的。
答案 2 :(得分:0)
我认为在查询字符串中传递搜索参数是你应该去的方式,特别是如果所有参数都是可选的。它还使您可以毫不费力地使用普通的method="get"
表单。
我不认为“安全/个人数据”与此有任何关系,因为查询字符串是URL的一部分,就像路径一样。
答案 3 :(得分:0)
IMO我认为这绝对没问题。我认为当路径表示函数并且查询字符串参数表示过滤器时,最好在MVC中使用查询字符串。就像在搜索中一样。
但是,我不会将查询字符串参数用于表示所检索内容信息的数据。因此,如果为年份和月份返回多页文章,我会在路径中包含文章的年份和月份,但不包括页码。