Как я могу добавить параметр URL-адреса в Routelink в asp.net MVC? - PullRequest
1 голос
/ 03 мая 2009

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

routes.MapRoute(
                "Default",                                              
                "{controller}/{action}/{id}",                           
                new { controller = "Home", action = "Index", id = 1}
            );

Так работает следующий URL: http://somesite.com/tags/index/1

Однако, некоторые из моих страниц индекса принимают параметры URL следующим образом:

http://somesite.com/tags/index/1?when=lastmonth

Как я могу использовать Html.RouteLink для ссылки на это?

Вы не можете добавить '?' к маршрутам в глобальном asax-файле, например:

routes.MapRoute("TagsWhen", "Tags/index/{id}?when={when}",
      new {controller = "Tags", action = "Index", id = "", when = ""});

Если бы этот маршрут работал, я мог бы связать его с помощью:

Html.RouteLink(string.Format("{0} ", link.Rating), "LinksWhen", 
               new {id=link.ReferenceId, when=Model.When})

но это не так! Поэтому я не уверен, как бы использовать Html.RouteLink для генерации http://somesite.com/tags/index/1?when=lastmonth

Ответы [ 3 ]

1 голос
/ 04 мая 2009

Только что нашел решение сам. Вы можете просто выполнить обычный Html.RouteLink и любые свойства объекта, которые вы не сопоставили с URL-адресом в global.asax, который он добавляет в качестве параметра url.

Итак, используя этот маршрут:

    routes.MapRoute(
        "Links",                                              
        "Links/details/{id}",                           
        new { controller = "Links", action = "Details", id = ""} defaults
    );

и этот routelink:

Html.RouteLink("Link Text", "Links", 
        new {id=link.ReferenceId, when=Model.When })

генерирует правильный URL:

http://localhost:2535/Links/details/1?when=onemonth

0 голосов
/ 04 мая 2009

Подход Мэтью, вероятно, не сработал, потому что он нуждался в другом параметре null в конце, иначе он передает значения маршрута как атрибуты html. :)

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" }, null) %>

Тот последний MapRoute(), который вы придумали, должен хорошо с ним работать.

0 голосов
/ 03 мая 2009

У меня нет компьютера, способного это проверить, но у меня все в порядке

<%= Html.ActionLink("Link text", "Index", "Home", new { id = 1, when = "lastmonth" } %>

Вам не нужно указывать необязательные параметры в ваших маршрутах в файле global.asax.cs. Все, что не соответствует, по умолчанию помещается в строку запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...