В настоящее время я работаю над довольно простым приложением MVC, которое позволяет пользователю вводить некоторые поисковые данные, получать список результатов, затем просматривать каждый элемент и т. Д. Все идет довольно хорошо, однако сейчас я пытаюсь реализовать пейджинг, но возникли проблемы.
Моя форма поиска использует HTTP GET, запрашивая следующее действие:
public ActionResult Results(PropertySearchData data, int? page)
{
...
IEnumerable<Property> search = mService.SearchProperties(data);
ViewData["SearchData"] = data;
return View("Results", "Site", search.ToPagedList(page ?? 0, 20));
...
}
Отсюда я строю свою таблицу результатов из коллекции IEnumerable, переданной в мое представление. Кроме того, я использовал ViewData для хранения параметров поиска, чтобы я мог передавать их, когда пользователь запрашивает другую страницу.
Например, чтобы перейти на первую страницу, я хотел бы использовать что-то вроде этого:
Html.ActionLink("First", "Results", new { data = ViewData["SearchData"], page = 1 })
Однако, когда эта ссылка сгенерирована, моя ссылка выглядит так:
/Results?data=PropertySearchData&page=1
Если я полностью удалю параметр 'page' и просто передам ViewData ["SearchData"] в качестве значения моего маршрута, моя ссылка будет сгенерирована так, как мне бы хотелось (т.е. каждый член PropertySearchData передается в виде строки запроса через функция привязки модели. Я предполагаю, что это связано с тем, что привязка модели может работать правильно, только если вы указали один тип?
Я вижу несколько причин, почему это не работает; то, с чем у меня проблемы, - это найти «хороший» способ сделать то, что я пытаюсь сделать. Я знаю, что мне, должно быть, здесь не хватает жизненно важной части понимания, поэтому было бы очень признательно, если бы я мог получить некоторые подсказки о том, как подойти к этому.
Обратите внимание, что я действительно хочу придерживаться HTTP GET (поскольку это страница результатов поиска).
Спасибо!