Я не могу найти способ фильтрации с помощью PagedList

Ну, я предполагаю, что моя проблема на самом деле довольно проста. Это мой второй стол... Первый загрузился примерно за 3 минуты. В поисках способа сделать это быстрее я нашел это: с помощью nuget. Но я не могу заставить его фильтровать мои записи. Он фильтрует их один раз и показывает первую отфильтрованную страницу, но когда я нажимаю на любую страницу, она больше не фильтруется. В нижней части частичного представления (где отображается моя таблица) у меня есть вспомогательный метод, который фильтрует. Здесь я просто отправляю страницу на контроллер в одиночку... но в представлении (индексе) я фильтрую их по бренду, который также отправляет только бренд на контроллер.

Контроллер

public ActionResult Index(string brand_name, int? page)
        {
            //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?
            //var products = MyProductDataSource.FindAllProducts();
            ViewData["brand_name"] = brand_name;
            // if no page was specified in the querystring, default to the first page (1)
            var pageNumber = page.HasValue ? page.Value : 1;

            //ViewBag.OnePageOfProducts = onePageOfProducts;

            if (!string.IsNullOrWhiteSpace(brand_name))
            {
                // will only contain 12 products max because of the pageSize
                IPagedList<Material> onePageOfProducts = db.EContent_MaterialsFinalViewWithBcos
                    .Select(i => new Material
                    {
                        Brand = i.Brand,
                        Category = i.Category,
                        Language = i.Language,
                        Bco = i.Bco,
                        MaterialCod = i.MaterialCod,
                        Derivation = i.Derivation,
                        Artwork = i.Artwork,
                        BcoDelivery = i.BcoDelivery,
                        MaterialId = i.MaterialId
                    })
                    .Where(p => p.Brand.ToLower() == brand_name.ToLower())
                    .OrderBy(i => i.MaterialCod)
                    .ToPagedList<Material>(pageNumber, defaultPageSize);

                return View("Index", onePageOfProducts);
            }
            else
            {
                // will only contain 12 products max because of the pageSize
                IPagedList<Material> onePageOfProducts = db.EContent_MaterialsFinalViewWithBcos
                    .Select(i => new Material
                    {
                        Brand = i.Brand,
                        Category = i.Category,
                        Language = i.Language,
                        Bco = i.Bco,
                        MaterialCod = i.MaterialCod,
                        Derivation = i.Derivation,
                        Artwork = i.Artwork,
                        BcoDelivery = i.BcoDelivery,
                        MaterialId = i.MaterialId
                    }).OrderBy(i => i.MaterialCod).ToPagedList<Material>(pageNumber, defaultPageSize);

                return View("Index", onePageOfProducts);
            }
        }

Просмотреть

@using PagedList.Mvc <!--import this so we get our HTML Helper-->

@model IPagedList<eContentMVC.Models.Material>

<div style="padding-top: 5px"></div>
@using (Html.BeginForm("Index", "Materials", FormMethod.Get))
{
    <div class="col-lg-3">
        <div class="input-group">
            <span class="input-group-btn">
                <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i> Search</button>
            </span>
            <input class="span2" id="appendedInputButton" type="text" name="brand_name" placeholder="Search Brand for..." />                 
        </div><!-- /input-group -->
    </div><!-- /.col-lg-3 -->
    <div style="padding-top: 20px"></div>
    <div id="grid-list">
        @{ Html.RenderPartial("_AjaxMaterialList", Model); }
    </div>    
}

Частичный просмотр

@using PagedList.Mvc <!--import this so we get our HTML Helper-->

@model IPagedList<eContentMVC.Models.Material>

<table>Some table here</table>
<div class="panel panel-primary filterable">
    <div class="centerAlign">
        <!-- output a paging control that lets the user navigation to the previous page, next page, etc -->
        @Html.PagedListPager(Model, page => Url.Action("Index", "Materials", new
       {
           //It would be awesome if I could have some brand_name = brand
           page
       }))
    </div>
</div>

person Aoren    schedule 01.07.2015    source источник


Ответы (1)


Когда вы нажимаете на другой номер страницы, вы получаете brand_name => null или пусто в контроллере. Я вижу, что вы сохраняете имя_бренда в ViewData, поэтому вы можете снова получить его в представлении и показать в текстовом поле, поэтому оно всегда отправляется в контроллер вместе с номером страницы. Вы можете сделать это следующим образом:

<input class="span2" id="appendedInputButton" type="text" name="brand_name" placeholder="Search Brand for..." value="@ViewData["brand_name"]"/>
person lukiller    schedule 01.07.2015
comment
Просто добавив это, это не сработало. Я что-то упускаю? - person Aoren; 02.07.2015
comment
Я добавил brand_name = Request["brand_name"], в помощник PagedListPager в частичном представлении, и это сработало. Спасибо! Ответ принят. - person Aoren; 02.07.2015