Как создать правильные значения маршрута для этого 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
, я вижу, что свойства объекта передают адрес, но я не могу добавить параметр "страница".
Ответы
Ответ 1
Думает, что лучше создать другой объект с правильными значениями вместо того, чтобы использовать (и, возможно, изменить текущие значения маршрута):
<%=Html.ActionLink("Next Page >", "SearchResults", new {
search = this.Model,
page = 1 //or whatever
}) %>
Ответ 2
Это сообщение блога Скотта Гатри помогло мне обернуть мою голову вокруг маршрутизации URL: ASP.NET MVC Framework (часть 2): Маршрутизация URL
![enter image description here]()
![enter image description here]()
Мне нравится, что он включил тесты!
![enter image description here]()
Ответ 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 })