Asp.Net MVC 3 Routing - Генерация исходящего URL с использованием UrlHelper использует запрос RouteData - PullRequest
0 голосов
/ 05 июня 2011

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" })

Результат верный, если текущий URL-адрес / SUV / search-car

  • / SUV / search-car
  • / SUV / NY / поиск

и когда текущим URL является / SUV / NY / search, они оба превращаются в

  • / SUV / NY / поиск
  • / SUV / NY / поиск

Таким образом, в первую ссылку {location} переносится из текущего запроса. Я не хочу, чтобы мои ссылки менялись :)

Я пытался поставить пустое место

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

, поэтому он генерирует это (использует правильный маршрут, но добавляет это как параметр)

/ SUV / поиск автомобиля? Место = NY

Как создать ссылки, которые указывают на одно и то же действие и имеют различный набор данных маршрутизации и не зависят от текущего URL-адреса запроса.

1 Ответ

1 голос
/ 05 июня 2011

В качестве первого аргумента метода RouteUrl укажите имя маршрута, местоположение автомобиля или только автомобиль, например:

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