0

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

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

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

我试过Html.ActionLink()了,但它要求输入动作名称和控制器名称。但是,在我的 URL 格式中,我没有任何操作名称或控制器名称。我该如何解决这个问题?

4

1 回答 1

0

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

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

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

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

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

于 2009-04-14T18:11:52.907 回答