Asp.Net MVC 3路由 - 使用UrlHelper生成传出URL使用请求RouteData

时间:2011-06-05 10:05:10

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

Asp.Net MVC 3,例如使用UrlHelper创建传出链接时,将使用来自当前请求的RouteData。我真的不明白为什么。

这是我的路由

routes.MapRoute("car-location", "{car}/{location}/search", 
                new {
                    controller = MVC.Home.Name,
                    action = MVC.Home.ActionNames.Search
                },
                new {
                    car = "[a-zA-Z0-9_]+",
                    location = "[a-zA-Z0-9_]+"
                });

routes.MapRoute("car-only", "{car}/search-car",
                new
                {
                    controller = MVC.Home.Name,
                    action = MVC.Home.ActionNames.Search
                },
                new
                {
                    car = "[a-zA-Z0-9_]+"
                });

好的,现在我尝试生成链接:

@Url.RouteUrl(new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Search, car = "SUV" })
@Url.RouteUrl(new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Search, location = "NY", car = "SUV" })

当前网址为/ SUV / search-car

时结果正确
  • / SUV / search-car
  • / SUV / NY /搜索

当前网址为/ SUV / NY /搜索时,它们都变为

  • / SUV / NY /搜索
  • / SUV / NY /搜索

因此,第一个链接{location}从当前请求转移。我不希望我的链接改变:)

我尝试将空位置

$@Url.RouteUrl(new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Search, car = "SUV", location = "" })

所以它生成它(使用正确的路线,但将其添加为参数)

/ SUV /搜索车?位置= NY

如何生成指向相同操作并具有不同路由数据集的链接,并且与当前请求URL无关。

1 个答案:

答案 0 :(得分:1)

指定Route name,car-location或car-only作为RouteUrl方法的第一个参数,如此

@Url.RouteUrl("car-only", new { controller = MVC.Home.Name, action = MVC.Home.ActionNames.Search, car = "SUV", location = "" })