Как мне создать правильные значения маршрута для этого ActionLink? - PullRequest
18 голосов
/ 27 ноября 2009

Модель SearchResults.aspx является экземпляром PersonSearch; когда приходит запрос на новую страницу (запрос GET), метод действия должен принять его и вычислить новые результаты.

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult SearchResults(PersonSearch search, int? page)
{
    ViewData["Results"] = new PaginatedList<Person>(_searchService.FindPersons(search), page ?? 0, 1);
    return View("SearchResults", search);
}

Затем я должен сгенерировать предыдущие / следующие ссылки:

<%= Html.ActionLink("Next Page >", "SearchResults", routeValues) %>

Если я использую routeValues = ViewData.Model, я вижу свойства объекта, переданные по адресу, но не могу добавить параметр "page".

Ответы [ 5 ]

24 голосов
/ 27 ноября 2009

Было бы лучше создать другой объект с правильными значениями, а не использовать (и, возможно, изменить текущие значения маршрута):

<%=Html.ActionLink("Next Page >", "SearchResults", new {
    search = this.Model,
    page = 1 //or whatever
}) %>
6 голосов
/ 05 октября 2011

Эта запись в блоге Скотта Гатри помогла мне разобраться в маршрутизации URL: ASP.NET MVC Framework (часть 2): маршрутизация URL

enter image description here enter image description here

Мне нравится, что он включил тестовые случаи! enter image description here

3 голосов
/ 26 января 2010

Вам необходимо переопределить ToString ().

2 голосов
/ 02 апреля 2014

Если вы используете Razor (я понимаю, что OP спросили четыре года назад, прежде чем Razor был изобретен, но люди, находящие это, возможно, используют его).

Мне удалось заставить что-то работать, используя встроенный метод @helper.

@helper RunnerLink(PersonSearch model, int page)
{
    var routeParms =new RouteValueDictionary(model.GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(model, null)));
    routeParms.Add("page", page.ToString());
    routeParms.Add("Controller", "Property");
    @Html.ActionLink("Search", "Index", routeParms)
}

Использование будет простым -

@RunnerLink(myPersonSearchInstance, 1)

Это не самое элегантное решение, но оно хорошо работает, если вы хотите передать объект в качестве routeValue, но вам нужно передать дополнительные элементы, такие как Controller, Area или в случае OP page.

1 голос
/ 18 января 2018

Вам нужно использовать RouteLink вместо ActionLink. Ваш код должен выглядеть примерно так

@Html.RouteLink("Next", new {controller = "SearchResults", action = "Index", search=samevalue, page=1 }) 
...