【问题标题】:How can I implement Dynamic Routing with my choice of URL format?如何使用我选择的 URL 格式实现动态路由?
【发布时间】:2009-04-14 15:48:14
【问题描述】:

我的 URL 要求是 countryname/statename/cityname。为此,我正在编写自己的 RouteHandler 并在 routecollection 中添加一条新路由,如下所示:

routes.Add(new Route("{*data}",
           new RouteValueDictionary(new
               {
                 controller = "Location",
                 action = "GetLocations"
               }),
           new MyRoutehandler()));

现在我的问题是:如何生成这种类型的 URL?

我尝试了Html.ActionLink(),但它要求提供操作名称和控制器名称。但是,在我的 URL 格式中,我没有任何操作名称或控制器名称。我该如何解决?

【问题讨论】:

    标签: asp.net-mvc routing url-routing


    【解决方案1】:

    您是否有理由不能将以下内容与内置路由处理程序一起使用:

    routes.MapRoute("LocationRoute",
                    "{countryname}/{statename}/{cityname}", 
                    new { controller = "Location", action = "GetLocations" });
    

    这可能与默认的“{controller}/{action}/{id}”路由冲突,但无论如何都会在您当前的系统中发生(除非您创建自定义 Route,继承自System.Web.Routing.RouteBase,而不是自定义的路由处理程序)。 Route Handler 用于处理提取路由数据后要执行的操作。由于您仍在使用 Controller 和 Action,因此您应该仍然可以使用 MvcRouteHandler。如果您想自定义提取路线数据的方式,您可能需要自定义 Route

    顺便说一句,如果你想使用不涉及控制器和动作名称的路由,请使用Html.RouteLinkActionLink 只是一个包装器,它将控制器和操作放入RouteValuesDictionary 并调用与RouteLink 相同的内部帮助程序。

    虽然在这种情况下,路由仍然有一个Controller和Action(“Location”和“GetLocations”),所以你仍然可以使用ActionLink。我认为 ActionLink 允许您指定路由名称,因此如果您为路由命名,您可以在ActionLink 中指定该名称,它将使用该路由生成 URL(我可能是错了,如果是这样,您仍然可以使用 RouteLink 并手动添加控制器和操作路由值)

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2015-10-17
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多