【问题标题】:ASP.NET MVC: url routing vs querystringASP.NET MVC:url 路由与查询字符串
【发布时间】:2010-11-01 10:03:38
【问题描述】:

我有一个类似/Comments/Search/3 的页面,我在其中搜索并显示线程“3”的所有 cmets。

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

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

谢谢

【问题讨论】:

    标签: asp.net-mvc routing query-string


    【解决方案1】:

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

    哪个更好?就个人而言,我使用路径来控制正在显示的 contents,并使用 querystring 来控制 presentation(它的显示方式、格式设置等)。因此,对于排序,我会使用 querystring 方法。但我认为这两种方法都没有技术劣势。

    【讨论】:

      【解决方案2】:

      我更喜欢:/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 将失败: /评论/搜索

      【讨论】:

      • 我想我会选择这个解决方案。我如何路由它并设置默认值,因为 sort=3 是可选的?
      • 由于约定优于配置,请记住,您的方法的参数必须分别称为“id”和“排序”。
      • 在 MVC 2 中,您可以使用 UrlParameter.Optional 并且在操作参数中使用 int? id 而不是 int id 如果您希望它是可选的,/Comments/Search 以显示带有空输入的默认搜索 UI文本。
      【解决方案3】:

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

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

      那么您的网址将显示为 /Comments/Search/3/Sort/Author

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多