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 опцию из всего списка (так что, если вы уже используете другие опции где-то еще, вы можете забыть об этом), и у вас нет никакого контроля над выполненным запросом, поэтому настройка на самом деле здесь не вариант, если вы не хотите перехватывать звонки.

Во всяком случае, так я это исправил, надеюсь, это поможет кому-то в будущем!

Другие вопросы по тегам