вторник, 27 апреля 2010 г.

MVC.Многостраничный просмотр таблицы.

Задача сводится к следующему. При выводе данных в окно браузера ограничиться некоторым количеством записей из таблицы, чтобы помещалось на экране. А тажке соорудить навигацию для доступа к невидимой части.
"MVC PageIndex" - запрос к Google.
Решение очень быстро нашлось. http://en.webdiyer.com/ . Абсолютно бесплатный модуль. Есть очень понятные примеры. http://en.webdiyer.com/MvcPager/Demo/StandardТак как я использую сначала фильтр, а потом уже вывожу данные, то вот мой измененный код:

Function Consumable(ByVal id1 As Integer?) As ActionResult
 Dim Datacontext As New PrintModelDataContext
 Dim ListConsumables As IQueryable(Of ClassConsumable)
 ListConsumables = From c In Datacontext.consumable, p In Datacontext.Printer _
                  Where c.Id_printer = p.Id _
                  Select New ClassConsumable _
                             With {.Id = c.Id, _
                                   .Naim = c.Naim, _
                                   .Part_number = c.Part_number, _
                                   .Revolving = c.Revolving, _
                                   .Count = c.Count, _
                                   .NaimPrinter = p.Naim}
 Return View(ListConsumables.ToPagedList(IIf(id1 Is Nothing, 1, id1), 20))
End Function


Мне пришлось создать новый класс, который является неким объединением двух таблиц Consumable и Printer. Ну а в представлении я абсолютно точно копирую из оригинала. Только перевожу в синтаксис языка  VB

<%=Html.Pager(Of print.ClassConsumable)(Model, New PagerOptions With {.PageIndexParameterName = "id1"})%>

И еще полезно будет в Web.config в каталоге VIEW внести строчку

<namespaces>
<add namespace="Webdiyer.WebControls.Mvc"/>
</namespaces>

Чтоб метод Pager был доступен в каждой странице проекта.