Подтвердить что ты не робот

Как создать правильные значения маршрута для этого ActionLink?

Модель 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, я вижу, что свойства объекта передают адрес, но я не могу добавить параметр "страница".

4b9b3361

Ответ 1

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

<%=Html.ActionLink("Next Page >", "SearchResults", new {
    search = this.Model,
    page = 1 //or whatever
}) %>

Ответ 3

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

Ответ 4

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

Мне удалось получить что-то, используя метод inline @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 или в случае OPs page.

Ответ 5

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

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