Мой метод заключается в том, чтобы иметь действие, которое обрабатывает сценарии как post, так и get.
Это мой, который может быть обработан методами GET и POST:
public ViewResult Index([DefaultValue(1)] int page,
[DefaultValue(30)] int pageSize,
string search,
[DefaultValue(0)] int regionId,
[DefaultValue(0)] int eventTypeId,
DateTime? from,
DateTime? to)
{
var events = EventRepo.GetFilteredEvents(page, pageSize, search, regionId, eventTypeId, from, to);
var eventFilterForm = EventService.GetEventFilterForm(from, to);
var eventIndexModel = new EventIndexModel(events, eventFilterForm);
return View("Index", eventIndexModel);
}
eventFilterForm
- это модель презентации, которая содержит некоторые свойства IEnumerable<SelectListItem>
для моей формы поиска.
eventIndexModel
- это модель представления, которая объединяет eventFilterForm
и результаты поиска - events
events
- это особый тип IPagedList
. Вы можете получить больше информации и код для этого здесь и здесь . Первая ссылка говорит о IPagedList, где вторая ссылка имеет сценарий расширенного пейджинга, который вам необходим.
В расширенной подкачке используется следующий метод:
public static string Pager(this HtmlHelper htmlHelper, int pageSize, int currentPage, int totalItemCount, RouteValueDictionary valuesDictionary)
И я использую это так:
<%= Html.Pager(Model.Events.PageSize,
Model.Events.PageNumber,
Model.Events.TotalItemCount,
new
{
action = "index",
controller = "search",
search = ViewData.EvalWithModelState("Search"),
regionId = ViewData.EvalWithModelState("RegionId"),
eventTypeId = ViewData.EvalWithModelState("EventTypeId"),
from = ViewData.EvalDateWithModelState("From"),
to = ViewData.EvalDateWithModelState("To")
}) %>
Это создает ссылки, которые выглядят так:
/ событие / поиск? RegionId = 4 & EventTypeID = 39 & с = 2009/09/01 и к = 2010/08/31 и страница = 3
HTHS
Charles
Ps. EvalWithModelState
ниже:
PPs. Если вы собираетесь помещать даты в переменные get - я бы порекомендовал прочитать на нем мой пост ...: -)
/// <summary>
/// Will get the specified key from ViewData. It will first look in ModelState
/// and if it's not found in there, it'll call ViewData.Eval(string key)
/// </summary>
/// <param name="viewData">ViewDataDictionary object</param>
/// <param name="key">Key to search the dictionary</param>
/// <returns>Value in ModelState if it finds one or calls ViewData.Eval()</returns>
public static string EvalWithModelState(this ViewDataDictionary viewData, string key)
{
if (viewData.ModelState.ContainsKey(key))
return viewData.ModelState[key].Value.AttemptedValue;
return (viewData.Eval(key) != null) ? viewData.Eval(key).ToString() : string.Empty;
}