MVC PagedList отправляет странные запросы на сервер
Я использую MVC с PagedList для того, чтобы большая таблица была разделена на несколько страниц.
Теперь в веб-браузере я вижу следующее: http://localhost:49370/Home/Pending?page=2
Что имеет смысл. Однако при отправке запроса на сервер сервер получает следующее: http://localhost:49370/Home/WhereAmI?_=1429091783507
Это огромный беспорядок, и, в свою очередь, делает невозможным перенаправление пользователя на определенные страницы в списке, потому что я не знаю, какую страницу пользователь просматривает в данный момент!
Код контроллера:
public ActionResult Pending(int? page)
{
//I have a ViewModel, which is MaterialRequestModel
IEnumerable<MaterialRequestModel> model = DB.GATE_MaterialRequest
.Select(req => new MaterialRequestModel(req))
.ToList();
int pageNum = page ?? 1;
return View(model.ToPagedList(pageNum, ENTRIES_PER_PAGE));
}
Посмотреть код:
@model IEnumerable<MaterialRequestModel>
<table>
//table stfuff
</table>
<div style="display: block;text-align: center">
@Html.PagedListPager((PagedList.IPagedList<MaterialRequestModel>)Model, page => Url.Action("Pending", new { page }), PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>
Это ограничение MVC PagedList? Или я что-то упустил?
1 ответ
Бывает, что PagedList не отправляет информацию такого типа на сервер. Вместо этого, если вы хотите узнать, какая страница просматривается, вы должны использовать пользовательскую модель, которая имеет эту информацию, и если вы хотите сделать запрос, использующий ajax (первоначальная цель здесь), вы должны использовать специальную опцию:
@Html.PagedListPager(Model.requests, page => Url.Action("SearchTable", "Home",
new
{
employeesQuery = Model.query.employeesQuery, //your query here
pageNum = page
}
), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "tableAndPaginationDiv", OnComplete = "initiatePendingTableDisplay" }))
По общему признанию это решение плохо в лучшем случае. Вы можете иметь только 1 опцию из всего списка (так что, если вы уже используете другие опции где-то еще, вы можете забыть об этом), и у вас нет никакого контроля над выполненным запросом, поэтому настройка на самом деле здесь не вариант, если вы не хотите перехватывать звонки.
Во всяком случае, так я это исправил, надеюсь, это поможет кому-то в будущем!