Как использовать раскрывающийся список для размера страницы в разбиении на страницы с представлением индекса ASP.NET MVC?

Я использовал это для подкачки списка записей в моем приложении ASP.NET MVC 4: http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory

Я хотел бы добавить раскрывающийся список, чтобы изменить значение размера страницы. При изменении элемента, выбранного в раскрывающемся списке, я бы хотел, чтобы размер страницы изменился. Я не хочу использовать размер страницы по умолчанию.

После просмотра комментариев я сделал следующее в представлении Index.cshtml после элемента <table>:

<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount)
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s)

</div>

@using (Html.BeginForm()) {
  <div id="pro_pag2">
    @Html.DropDownList("PageSize", new SelectList(new Dictionary<string, int> { { "10", 10 }, { "20", 20 }, { "100", 100 } }, "Key", "Value"), new { @class = "pro_pag_tf1", id = "pagesizelist" })
</div>
}

@section scripts {
<script type="text/javascript">
    $('#pagesizelist').on('change', function (event) {
        var form = $(event.target).parents('form');

        form.submit();
    });
</script>
}

Индексное действие контроллера Index.cs:

public ActionResult Index(int? PageSize, int? page)
{
    int? DefaultPageSize = 10;
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    if (PageSize != null) {
        DefaultPageSize = PageSize;
    }
    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize));
}

Изменение номера страницы работает. Но когда я изменяю размер страницы с помощью раскрывающегося списка и выбираю 2 в качестве номера страницы, по умолчанию используется размер страницы...

Я предполагаю, что это связано с тем, что кнопка выбора страницы не отправляет размер страницы, выбранный из раскрывающегося списка... как мне получить выбранное значение из раскрывающегося списка в методе действия индекса?

Как я могу передавать выбранное значение из раскрывающегося списка каждый раз, когда я нажимаю кнопку страницы? Кажется, это работает, просто выбрав раскрывающийся список?

Может быть, есть лучшее решение?


person Qwerty    schedule 19.03.2014    source источник


Ответы (1)


Основываясь на приведенном выше коде, сгенерированная ссылка страницы 2 будет выглядеть так:

<a href="/Index?page=2">2</a>

в то время как это должна быть правильная сгенерированная ссылка, если вы измените размер страницы на 20

<a href="/Index?PageSize=20&page=2">2</a>

Что вам нужно сделать, так это добавить аргумент PageSize ко всем ссылкам с номерами страниц в зависимости от выбранного размера страницы. В примере из http://demo.taiga.nl/MvcPaging/Paging/ViewByCategory используется ViewBag, чтобы добавить аргумент categoryName к каждой ссылке номера страницы на основе выбранной категории, поэтому я предлагаю использовать аналогичный способ.

Во-первых, измените метод вашего контроллера на этот:

public ActionResult Index(int? PageSize, int? page)
{
    int? DefaultPageSize = 10;
    int currentPageIndex = page.HasValue ? page.Value - 1 : 0;
    if (PageSize != null) {
        DefaultPageSize = PageSize;
    }

    ViewBag.PageSize = DefaultPageSize;

    return View(contractsList.ToPagedList(currentPageIndex, (int)DefaultPageSize));
}

затем измените содержимое <div class="pager"> в коде просмотра на это

<div class="pager">
    @Html.Pager(Model.PageSize, Model.PageNumber, Model.TotalItemCount).Options(o => o.AddRouteValue("PageSize", ViewBag.PageSize))
    Displaying @Model.ItemStart - @Model.ItemEnd of @Model.TotalItemCount items(s)

</div>
person ekad    schedule 21.03.2014