MVC Html.ActionLink неправильно передает строку запроса - PullRequest
1 голос
/ 10 апреля 2010

Кажется, это должно быть довольно просто, но я, очевидно, растерялся.

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

<%= Html.ActionLink("First Page", "List", new { page = 1} ) %>
&nbsp; 
<%= Html.ActionLink("Prev Page", "List", new { page = Model.PageNumber - 1 }) %>
&nbsp;
<%= Html.ActionLink("Next Page", "List", new { page = Model.PageNumber + 1 }) %>
&nbsp;
<%= Html.ActionLink("Last Page", "List", new { page = Model.LastPage } )%>

Я использую базовую настройку маршрутов по умолчанию, за исключением того, что вместо "Index" вместо "Index" указано:

            routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

Проблема в том, что помощники ActionLink генерируют ссылки вида:

http://localhost:2083/Retrofit?page=2

, а не

http://localhost:2083/Retrofit/?page=2

(с косой чертой после имени контроллера и перед строкой запроса). Когда первый URL маршрутизируется, он полностью теряет строку запроса - если я посмотрю на Request.QueryString к тому времени, когда он попадет в контроллер, он будет нулевым. Если я введу второй URL-адрес (с завершающей косой чертой), он будет указан правильно (т. Е. QueryString из "page = 2").

Так как же я могу заставить помощника ActionLink сгенерировать правильный URL-адрес или заставить Routing правильно проанализировать, что генерирует ActionLink?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2010

Вам нужно выбрать одно из двух действий:

  1. Измените маршрут, чтобы он принял параметр page вместо значения по умолчанию id, и соответственно измените сигнатуру вашего метода действия.

  2. Измените вызовы на Html.AcitonLink(), чтобы они называли параметр id, то есть измените new { page = ... } на new { id = ... }.

0 голосов
/ 06 февраля 2012

Это старый вопрос, но для других я решил добавить ответ, который вы ищете, добавить оба параметра routeValues, например

 Html.ActionLink("Last Page", "List", new { id = Model.ID, page = Model.LastPage } )
...