MVC3 Нумерация страниц, штук на странице - PullRequest
4 голосов
/ 25 августа 2011

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

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

Ответы [ 4 ]

2 голосов
/ 25 августа 2011

Оформить PagedList (доступно как пакет nuget) .До сих пор я нашел его действительно дружественным к MVC.

1 голос
/ 27 августа 2011

Для подкачки на стороне сервера я использую https://github.com/dvsspr/Halaman. Это еще не задокументировано, но оно очень гибкое и использует свободную конфигурацию.

Один очень простой вариант использования для вас.

@ Контроллер

public ActionResult Index(AdminPageInfo page, SortInfo sort)
{
    PagedData<Account> model = accountRepository.Get().AsPagedData(page, sort);
    return (model.IsValid) ? View(model) : View("_Error");
}

@ Вид

@model PagedData<Account>
@{
    ViewBag.Title = "Account Index";
}
<p>
    Total records: <strong>@Model.TotalRows</strong>
    <br />
    Total pages: <strong>@Model.TotalPages</strong>
    <br />
    Total records in current page: <strong>@Model.TotalRowsInPage</strong>
</p>
@Html.Pager(Model)
@Html.Sizer(Model) @* Page size changer helper =) *@
@*
Put a dot after the closing brace and you will see the available options.
*@

<h3>Sorter</h3>
<li>
    <ul>@(Html.SortLink<Account>(zz => zz.Id, Model, "User Id"))</ul>
    <ul>@(Html.SortLink<Account>(zz => zz.UserName, Model, "User Name"))</ul>
    <ul>@(Html.SortLink<Account>(zz => zz.FullName, Model, "Full Name"))</ul>
</li>
@foreach (var acc in Model) {
    <p>
        User name: @acc.UserName
        <br />
        Full name: @acc.FullName 
    </p>
}

Вот и все.ИМХО, кодовая база может быть легко взломана - на тот случай, если вы захотите реализовать гибридную подкачку.

0 голосов
/ 25 августа 2011

С простым HTML вы можете использовать справку Webgrid в WebMatrix. Он имеет поддержку пейджинга из коробки с MVC.

http://msdn.microsoft.com/en-gb/magazine/hh288075.aspx

В противном случае любой из основных компонентов Javascript (jqgrid, extjs и т. Д.) Может выполнять подкачку страниц, все в зависимости от источника вашей модели. Если вы реализуете источник данных AJAX, то вам нужно будет передавать свойства пейджинга взад и вперед, чтобы пейджинг мог выполняться эффективно на стороне сервера (в зависимости от вашей базы данных).

0 голосов
/ 25 августа 2011

Если вы ищете преимущественно клиентское решение, у меня никогда не было проблем с jQuery Tablesorter с плагином Paginator: http://tablesorter.com/docs/example-pager.html

Если вы хотите использовать эту сторону сервера, общий подход заключается в том, что вы собираетесь кэшировать всю серверную часть набора результатов *, а затем делать (ajax или иным образом) вызовы на сервере, указывающие, какие записи необходимы. Вы передадите начальный индекс и количество записей для возврата через строку запроса или поле формы (а также некоторый идентификатор запроса, чтобы убедиться, что вы получаете правильный набор результатов).

* Как указывает mrjoltcola в комментариях, кеширование или не кеширование - это проблема для каждого конкретного случая, для больших наборов результатов может иметь больше смысла делать больше вызовов БД с меньшими наборами результатов. Альтернативное решение проблемы большого набора результатов - ограничение размера набора результатов и отображение сообщения, предлагающего им сделать свой запрос более конкретным, если превышен порог. Я бы посоветовал исходить из ваших лучших соображений и оптимизировать при необходимости .

...