Простой пользовательский пейджер в MVC 3

Я ищу лучший способ реализовать пейджер в соответствии со следующим простым требованием.

хочу такую ​​страницу

 <Pager 1 2 3 4 ...>

 <Partial View>

Мой контроллер действий будет выглядеть примерно так...

    public PartialViewResult DisplayRecordDetails(int recordNumber)
    {
        MyRecord mr = GetRecord(recordNumber);
        return PartialView(mr);
    }

Когда я нажимаю «1» (индекс страницы = 1), я передаю 1 в качестве параметра методу действия DisplayRecordDetails и загружаю частичное представление с записью 1.

Когда я нажимаю «2» (индекс страницы = 2), я передаю 2 в качестве параметра методу действия DisplayRecordDetails и загружаю частичное представление с записью 2 и так далее...

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

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


person Max    schedule 12.03.2012    source источник


Ответы (1)


Вы можете создать модель представления, которая будет содержать все идентификационные номера:

public class MyViewModel
{
    // the currently selected id
    public int Id { get; set; }

    // a list of available ids
    public int[] Ids { get; set; }
}

А затем выполните действие контроллера, которое будет запрашивать вашу базу данных или что-то еще и получать список всех доступных идентификаторов:

public ActionResult Index(int? id)
{
    var model = new MyViewModel
    {
        Id = id ?? 0,
        Ids = new[] { 563, 845, 845 } // those will come from your datasource
    };
    return View(model);
}

и в соответствующем представлении вы можете перебирать эти идентификаторы и генерировать ссылки:

@model MyViewModel
<div>
    @Html.Action("DisplayRecordDetails", new { recordNumber = Model.Id })
</div>
@for (var i = 0; i < Model.Ids.Length; i++) 
{
    <span>@Html.ActionLink((i + 1).ToString(), "Index", new { id = i })</span>
}
person Darin Dimitrov    schedule 12.03.2012
comment
Спасибо Дарин. Это довольно хорошее решение для небольшого количества страниц. Теперь мне осталось беспокоиться о появлении пейджера, если у меня большой радиус действия. Какие-нибудь хитрости для функциональности «Далее» и «Предыдущий»? - person Max; 12.03.2012
comment
Я только что нашел простой плагин jQuery, который я могу использовать. blog.ajaxmasters.com/jquery-pagination-plugin Я просто установил элементы для page = 1, и это работает как шарм... - person Max; 13.03.2012