Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC постраничный вывод / 24 сообщений из 24, страница 1 из 1
12.01.2015, 13:04
    #38852162
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
Всем привет. Кто нибуть может подсказать как сделать постраничный вывод информации. есть следующий урл:
" http://localhost:60196/Milling/Details/0?ProviderId=1&OperationId=1&D=20&d1=20&ap=20" данный набор параметров возвращает 13 строк мне надо что бы на странице отображалось не более 5(например). в инете нашел пример для разбивки данных постранично, код контролера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public ActionResult Details(MillingCutter cutter, int? page)
        {
            int pageNumber = page ?? 0;
            decimal? D = cutter.D;
            decimal? d1 = cutter.d1;
            decimal? ap = cutter.ap;
            decimal? L = cutter.L;
            IQueryable<MillingCutter> cutters = db.MillingCutters.OrderBy(c => c.Id);
            if (D != null) cutters = cutters.Where(c => c.D == D);
            if (d1 != null) cutters = cutters.Where(c => c.d1 == d1);
            if (ap != null) cutters = cutters.Where(c => c.ap == ap);
            if (L != null) cutters = cutters.Where(c => c.L == L);
            ViewData["countItems"] = cutters.Count();
            ViewData["pageNumber"] = pageNumber;
            ViewData["pageSize"] = pageSize;
            cutters = cutters.Skip(pageNumber * pageSize).Take(pageSize);
            return View(cutters);
        }


код для формирования ссылок перехода выглядит следующим образом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public static MvcHtmlString Pager(this HtmlHelper helper, int pageNum, int countItems, int pageSize)
        {
            int totalPages = (int)Math.Ceiling((double)countItems / pageSize);
            StringBuilder result = new StringBuilder();
            if (pageNum > 0)
            {
                result.Append(helper.ActionLink("<<", "Details", new { page = 0 }));
                result.Append(helper.ActionLink("<", "Details", new { page = pageNum - 1 }));
            }
            else
            {
                result.Append(HttpUtility.HtmlEncode("<<"));
                result.Append(HttpUtility.HtmlEncode("<"));
            }
            if (pageNum < (totalPages - 1))
            {
                result.Append(helper.ActionLink(">", "Details", new { page = pageNum + 1 }));
                result.Append(helper.ActionLink(">>", "Details", new { page = totalPages - 1 }));
            }
            else
            {
                result.Append(HttpUtility.HtmlEncode(">"));
                result.Append(HttpUtility.HtmlEncode(">>"));
            }

            return MvcHtmlString.Create(result.ToString());
        }


что бы получить вторую порцию данных должна быть сформирована такая строка " http://localhost:60196/Milling/Details/0?ProviderId=1&OperationId=1&D=20&d1=20&ap=20&page=1" а как сформировать её кодом я не знаю.может кто нибуть подсказать как это сделать?
...
Рейтинг: 0 / 0
12.01.2015, 13:21
    #38852182
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
bald56rus,

Через запятую, как-то так:

Код: c#
1.
   new { page = totalPages - 1, ProviderId = 1, OperationId = 1, D = 20, d1 = 20, ap = 20 }))
...
Рейтинг: 0 / 0
12.01.2015, 13:21
    #38852184
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
http://www.nuget.org/packages/PagedList.Mvc/ возьми, в сорсы глянь если будет желание
п.с. ну и я б порекомендовал заменить ViewData на модель обобщённую
...
Рейтинг: 0 / 0
12.01.2015, 13:29
    #38852196
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
Axeleronbald56rus,

Через запятую, как-то так:

Код: c#
1.
   new { page = totalPages - 1, ProviderId = 1, OperationId = 1, D = 20, d1 = 20, ap = 20 }))



так наверно не получится потому что "ProviderId = 1, OperationId = 1, D = 20, d1 = 20, ap = 20" это динамические параметры т.е. пользователь указал значение он есть нет значит его нет. находил в инете что набор параметров можно получить через "Request.QueryString" только вот не соображу как это прикрутить.в контролере завести переменную куда считывать это значение а как передать в Pager точнее обработать не получается.

handmadeFromRu http://www.nuget.org/packages/PagedList.Mvc/ возьми, в сорсы глянь если будет желание смотрел.не разобрался как листать ограниченный список. т.е. следующая страница и результирующей выборки(где наложены ограничения в виде параметров заданных пользователем)
...
Рейтинг: 0 / 0
12.01.2015, 13:42
    #38852208
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
bald56rus, делаете модель где ваши поля выбора и будут а потом в хелпер вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Html.PagedListPager(Model.SomeItems, page => Url.Action("Details", new
                   {
                       page,
                       Model.ProviderId,
                       Model.OperationId ,
                       Model.D,
                       Model.d1,
                       Model.ap,
                   }))
...
Рейтинг: 0 / 0
12.01.2015, 15:18
    #38852324
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
handmadeFromRubald56rus, делаете модель где ваши поля выбора и будут а потом в хелпер вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Html.PagedListPager(Model.SomeItems, page => Url.Action("Details", new
                   {
                       page,
                       Model.ProviderId,
                       Model.OperationId ,
                       Model.D,
                       Model.d1,
                       Model.ap,
                   }))


а можно поподробнее?!
модель у меня есть,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class MillingCutter
    {
        public int Id { get; set; }
        public string Name {get;set;}
        public int ProviderId { get; set; }
        public int OperationId { get; set; }
        public decimal? D { get; set; }
        public decimal? d1 { get; set; }
        public decimal? ap { get; set; }
        public decimal? L { get; set; }
        public decimal? Flute { get; set; }
        public decimal? Ha { get; set; }
        public string Shank { get; set; }
        public decimal? r { get; set; }
        public decimal? H { get; set; }
        public decimal? D2 { get; set; }
        public decimal? l2 { get; set; }
        public decimal? Ta { get; set; }
        public decimal? Rd { get; set; }
        public string Chamfer { get; set; }

        public virtual Provider Provider { get; set; }
        [ForeignKey("OperationId")]
        public virtual OperationType OperationType { get; set; }
    }


данный пейджер подключил. так как Вы указали вызывать пейджер не получается вылазиет ошибка

Код: c#
1.
2.
3.
4.
 Ошибка компиляции
Описание: Ошибка во время компиляции ресурса, необходимого для обслуживания этого запроса. Просмотрите следующие сведения о данной ошибке и измените соответственно исходный код.

Сообщение об ошибке компилятора: CS1061: "PagedList.IPagedList<CatalogueInstrument.Models.MillingCutter>" не содержит определение для "D". Не удалось найти метод расширения "D", принимающий первый аргумент типа "PagedList.IPagedList<CatalogueInstrument.Models.MillingCutter>" (пропущена директива using или ссылка на сборку?)



модель в представлении подключаю так:
Код: c#
1.
@model PagedList.IPagedList<CatalogueInstrument.Models.MillingCutter>

что я делаю не так?
...
Рейтинг: 0 / 0
12.01.2015, 15:53
    #38852369
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
ок
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Html.PagedListPager(Model.SomeItems, page => Url.Action("Details", new
                   {
                       page,
                       Model.ProviderId,
                       Model.OperationId ,
                       Model.D,
                       Model.d1,
                       Model.ap,
                   }))


тут модель имеет такие поля
Код: c#
1.
2.
3.
4.
5.
6.
class ViewModel
{
public PagedList.IPagedList<DtoModel> SomeItems - данные по выбранному фильтру
public int ProviderId - выбранный фильтр 1
public int OperationId  - выбранный фильтр 2 и т.д. .....
}
...
Рейтинг: 0 / 0
12.01.2015, 21:13
    #38852608
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
handmadeFromRu http://www.nuget.org/packages/PagedList.Mvc/ возьми, в сорсы глянь если будет желание
п.с. ну и я б порекомендовал заменить ViewData на модель обобщённую
Зачем? Есть же штатный вебгрид.
Тут пример http://codearticles.ru/articles/780
...
Рейтинг: 0 / 0
12.01.2015, 23:39
    #38852659
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУЗачем? Есть же штатный вебгрид.
Тут пример http://codearticles.ru/articles/780
чисто мое имхо, мне не нравиться мапинг "grid.Column("Name", "Название", " потому что строки.
...
Рейтинг: 0 / 0
13.01.2015, 01:20
    #38852690
Calabonga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
Вот описание " Как сделать PagedList? "
А это мой nugget PagedListExt
...
Рейтинг: 0 / 0
13.01.2015, 01:20
    #38852691
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
handmadeFromRuМСУЗачем? Есть же штатный вебгрид.
Тут пример http://codearticles.ru/articles/780
чисто мое имхо, мне не нравиться мапинг "grid.Column("Name", "Название", " потому что строки.

Этот «штатный вебгрид» вообще полная вафля, зря они время на него только потратили.
Со строго типизированным кендовским гридом не валялось даже рядом.
...
Рейтинг: 0 / 0
13.01.2015, 08:32
    #38852736
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
handmadeFromRuок
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Html.PagedListPager(Model.SomeItems, page => Url.Action("Details", new
                   {
                       page,
                       Model.ProviderId,
                       Model.OperationId ,
                       Model.D,
                       Model.d1,
                       Model.ap,
                   }))


тут модель имеет такие поля
Код: c#
1.
2.
3.
4.
5.
6.
class ViewModel
{
public PagedList.IPagedList<DtoModel> SomeItems - данные по выбранному фильтру
public int ProviderId - выбранный фильтр 1
public int OperationId  - выбранный фильтр 2 и т.д. .....
}


не сочтите за наглость, не понимаю как в этом случае будет выглядеть представление для вывода списка из ViewModel? предполагаю что представление должно быть строго типизированным на основании ViewModel? а как должне быть организорван вывод строк ?
до этого делал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@foreach (var item in Model) {
        <tr>
            <td>@Html.DisplayFor(modelItem => item.Name)</td>
            <td>@Html.DisplayFor(modelItem => item.ProviderId)</td>
            <td>@Html.DisplayFor(modelItem => item.OperationId)</td>
            <td>@Html.DisplayFor(modelItem => item.D)</td>
            <td>@Html.DisplayFor(modelItem => item.d1)</td>
            <td>@Html.DisplayFor(modelItem => item.ap)</td>
            <td>@Html.DisplayFor(modelItem => item.L)</td>
            <td>@Html.DisplayFor(modelItem => item.Flute)</td>
            <td>@Html.DisplayFor(modelItem => item.Ha)</td>
            <td>@Html.DisplayFor(modelItem => item.Shank)</td>
            <td>@Html.DisplayFor(modelItem => item.r)</td>
            <td>@Html.DisplayFor(modelItem => item.H)</td>
            <td>@Html.DisplayFor(modelItem => item.D2)</td>
            <td>@Html.DisplayFor(modelItem => item.l2)</td>
            <td>@Html.DisplayFor(modelItem => item.Ta)</td>
            <td>@Html.DisplayFor(modelItem => item.Rd)</td>
            <td>@Html.DisplayFor(modelItem => item.Chamfer)</td>
        </tr>
    }
...
Рейтинг: 0 / 0
13.01.2015, 08:44
    #38852745
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
Все, спасибо всем, разобрался
...
Рейтинг: 0 / 0
13.01.2015, 09:19
    #38852773
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
hVostthandmadeFromRuпропущено...
чисто мое имхо, мне не нравиться мапинг "grid.Column("Name", "Название", " потому что строки.
Этот «штатный вебгрид» вообще полная вафля, зря они время на него только потратили.
Со строго типизированным кендовским гридом не валялось даже рядом.
А никто и не собирается с кем-то конкурировать. Есть штатный контрол, взял и заработало. Всё остальное - нытьё на пустом месте. Или для пейджинга ты мне предлагаешь 1K баксов заплатить? :)
...
Рейтинг: 0 / 0
13.01.2015, 11:32
    #38852915
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУА никто и не собирается с кем-то конкурировать. Есть штатный контрол, взял и заработало. Всё остальное - нытьё на пустом месте. Или для пейджинга ты мне предлагаешь 1K баксов заплатить? :)

Дело не в баксах, а в подходе. Вебгрид похоже старпёрщики писали, нет бы сделать нормальный типизированный флюент. Такую полезную и мощную штуку сделали через зад.
...
Рейтинг: 0 / 0
13.01.2015, 11:43
    #38852931
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУ,

@Html.WebGrid<ItemModel>().Sort(s => s.By(x => x.Name)).Pager(p => p.Size(10)).DataSource(data).Columns(c => { c.Add(p => p.Name); c.Add(p => p.Some); })

Можно же сделать типо такого. Типизировано, удобно, минимум оверхеда, определение и использование одной инструкцией. А не как щас, настройка размазана в двух местах: new WebGrid() и GetHtml(), сиди ковыряйся в доке, где чего надо указывать, как называются параметры и как их использовать. Нафиг надо такое счастье, не юзабельно для продакшена совершенно.
...
Рейтинг: 0 / 0
13.01.2015, 19:55
    #38853608
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
hVosttДело не в баксах, а в подходе.
Плевать на подходы, если есть полнофункциональный штатный контрол. И как это дело не в баксах?

hVosttВебгрид похоже старпёрщики писали, нет бы сделать нормальный типизированный флюент. Такую полезную и мощную штуку сделали через зад.
Плевать, кто писал вебгрид. Он есть и этого достаточно. Ну не сделали нормальный типизированный флюент, ну сволочи, бывает. Детские сопли мочить - не мой подход.

hVosttМожно же сделать типо такого. Типизировано, удобно, минимум оверхеда, определение и использование одной инструкцией.
Можно сделать, но не сделали. Не страшно.

hVosttА не как щас, настройка размазана в двух местах: new WebGrid() и GetHtml(), сиди ковыряйся в доке, где чего надо указывать, как называются параметры и как их использовать. Нафиг надо такое счастье, не юзабельно для продакшена совершенно.
Там даже студент разберется, что и где нужно указывать. Счастье рабочее, бесплатное - взял, воткнул и забыл. Не вижу повода для паники.
...
Рейтинг: 0 / 0
14.01.2015, 04:42
    #38853732
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУПлевать на подходы, если есть полнофункциональный штатный контрол. И как это дело не в баксах?

Никакой он не полнофункциональный. Так... огрызок. Пока разбираешься как работает вебгрид и как его заюзать можно уже свой написать с блекджеком.
...
Рейтинг: 0 / 0
14.01.2015, 09:46
    #38853812
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
hVosttНикакой он не полнофункциональный. Так... огрызок.
Пока (кроме соплежевательства) никакой конкретики.

hVosttПока разбираешься как работает вебгрид и как его заюзать можно уже свой написать с блекджеком.
С ним может "разобраться" даже студент первого курса за пару минут.
...
Рейтинг: 0 / 0
14.01.2015, 10:05
    #38853830
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУПока (кроме соплежевательства) никакой конкретики.

Куда уж конкретней? Вебгрид не может являться полнофункциональным — это определение к нему вообще не применимо. Если только ты не обкурился. Чтобы заставить в вебгриде работать пейджинг, сортировку, фильтрацию, надо ещё станцевать в присядку.

В нормальных полнофункциональных компонентах всё включено, просто реально — бери и используй.

Так что не надо тут чесать по ушам.
...
Рейтинг: 0 / 0
14.01.2015, 11:33
    #38853917
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
hVosttКуда уж конкретней? Вебгрид не может являться полнофункциональным — это определение к нему вообще не применимо.
Опять сотресаешь воздух. Чего он не умеет, колись?

hVosttЧтобы заставить в вебгриде работать пейджинг, сортировку, фильтрацию, надо ещё станцевать в присядку.
Серьёзно?

Код: c#
1.
2.
3.
4.
5.
@{
    WebGrid grid = new WebGrid(canPage: true, canSort: true, rowsPerPage: Model.PageSize);
    grid.Bind(Model.Products, rowCount: Model.TotalRecords, autoSortAndPage: false);
    grid.Pager(WebGridPagerModes.All);
}



hVosttВ нормальных полнофункциональных компонентах всё включено, просто реально — бери и используй.
Тут тоже всё включено, бери и используй.
...
Рейтинг: 0 / 0
14.01.2015, 11:51
    #38853934
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУСерьёзно?

Код: c#
1.
2.
3.
4.
5.
@{
    WebGrid grid = new WebGrid(canPage: true, canSort: true, rowsPerPage: Model.PageSize);
    grid.Bind(Model.Products, rowCount: Model.TotalRecords, autoSortAndPage: false);
    grid.Pager(WebGridPagerModes.All);
}



Ну и на кой мне нужна сортирова и пейджинг вьюмодели, куда уже должны попадать отсортированные, отфильтрованные и выбранные данные? Бред какой-то показываешь.
...
Рейтинг: 0 / 0
14.01.2015, 12:18
    #38853966
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
МСУ,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
@(Html.Kendo().Grid<MyViewModel>()
    .Name("MyGrid")
    .Columns(column =>
    {
        column.Bound(p => p.Name);
        column.Bound(p => p.Some1);
        column.Bound(p => p.Some2);
        column.Bound(p => p.Some3);
    })
    .Sortable()
    .Pageable(a => a.DefaultPageSizes())
    .Filterable()
    .DataSource(ds => ds
        .WebApi()
        .DefaultPage()
        .Model(m => m.Id(p => p.Id))
        .Sort(a => a.Add(p => p.Name))
        .Read(a => a.Url(Url.HttpRouteUrl(AppApi.Some, null)))
    .Deferred()
)

...

        public IHttpActionResult Get([ModelBinder(typeof(WebApiDataSourceRequestModelBinder))]DataSourceRequest request)
        {
            var query = this.MyDataService
                .GetQueryBuilder()
                .All();
            return Ok(query
                .ToDataSourceResult(request, this.Mapper.Map<MyEntity, MyViewModel>));
        }



Всё. Полноценная серверная сортировка, полноценная серверная фильтрация, полноценный серверный пейджинг. Вот это называется полнофункциональный грид. У тебя есть датасоурс, берёшь его, берёшь вьюмодель, отражаешь данные во вью модель, отдаёшь гриду, получаешь всё, без лишних телодвижений.

А WebGrid это тупой хелпер для генерации HTML. Ни о какой «полнофункциональности» тут речи не может идти. Он даже пейджинг не реализует, в этом отношении даже чужой PageList.Mvc куда круче, чем это кривое убожество. Че ты его всем советуешь не пойму.
...
Рейтинг: 0 / 0
14.01.2015, 15:14
    #38854316
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NET MVC постраничный вывод
hVosttВсё. Полноценная серверная сортировка, полноценная серверная фильтрация, полноценный серверный пейджинг. Вот это называется полнофункциональный грид. У тебя есть датасоурс, берёшь его, берёшь вьюмодель, отражаешь данные во вью модель, отдаёшь гриду, получаешь всё, без лишних телодвижений.
http://codearticles.ru/articles/2383 всё, никаких вопросов

hVosttА WebGrid это тупой хелпер для генерации HTML. Ни о какой «полнофункциональности» тут речи не может идти. Он даже пейджинг не реализует, в этом отношении даже чужой PageList.Mvc куда круче, чем это кривое убожество. Че ты его всем советуешь не пойму.
Да, тупой хелпер. А зачем ему быть умным? Я не знаю, что там круче - я знаю, что коробочный WebGrid выполняет свою задачу. И меряться яйцами с платными гридами не входит в его круг задач.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC постраничный вывод / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]