简体   繁体   English

ASP.NET MVC筛选页面列表

[英]ASP.NET MVC filtering pagedlist

I have a problem with pagedList. 我的pagedList有问题。

I have a task to make a view with filter panel and paged list. 我的任务是使用过滤器面板和分页列表进行查看。

My views: 我的看法:

Index: This is the main view 索引:这是主视图

@model WebUI.Areas.Admin.Models.Product.ProductSearchViewModel

<div class="row">
    <div class="panel panel-default">
        <div class="panel-heading text-center">
            <h4 class="panel-title">
                <a data-toggle="collapse" href="#filter">@Resources.Lang.Filter</a>
            </h4>
        </div>
        <div id="filter" class="panel-collapse collapse">
            <div class="panel-body">
                @using (Ajax.BeginForm("ProductsList", "Product", new AjaxOptions { UpdateTargetId = "productsList" }, new { @id = "searchForm", @class = "form-horizontal" }))
                {
                   // some items to filter
                }
            </div>
        </div>
    </div>
</div>

<div id="productsList" class="row">
// Here will be rendered partial view with pagedList
</div>

Partial view with pagedList 具有pagedList的局部视图

@using PagedList.Mvc
@model PagedList.IPagedList<WebUI.Models.Product.RegularProductDomainModel>

@foreach (var item in Model)
{
    @Html.Partial("_ProductSummary", item)
}

Страница @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) из @Model.PageCount

@Html.PagedListPager(Model, page => Url.Action("ProductsList", page = page}),
    PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "productsList" }))

Controller 控制者

public ActionResult Index()
{

}

[HttpPost]
public ActionResult ProductsList(ProductSearchViewModel model, int page = 1, int pageSize = 5)
{
      using (_unitOfWork = _factory.Create())
      {
    // prepare list of items

var products = _unitOfWork.ProductsRepository.GetProducts(model.CategoryID, model.BrandID,   model.ProductStateID,null,true, model.Code)
                                .ToPagedList(page, pageSize);
                            return PartialView("_ProductsList", products);
     }
}

Filtering is working great. 过滤效果很好。 But if I want to filter values and then do paging it doesn't work, because when I click paging, in controller I have my ProductSearchViewModel only with default values . 但是,如果我要过滤值然后进行分页,那将不起作用,因为当我单击分页时,在控制器中我的ProductSearchViewModel 仅具有默认值 As I understand It doesn't work, because my PartialView doesn't know anything about ProductSearchViewModel, which is used as in Index.chtml. 据我了解,这是行不通的,因为我的PartialView对ProductSearchViewModel一无所知,该产品在Index.chtml中使用。 Is there any way to pass my ProductSearchViewModel to controller when I do paging? 执行分页时,是否可以将ProductSearchViewModel传递给控制器​​?

I can see two possible solutions... 我可以看到两种可能的解决方案...

1.) Pass the ProductSearchViewModel (or the values from it) into the partial view, so you can then pass it on into the pager helper from there. 1.)将ProductSearchViewModel(或其中的值)传递到局部视图,这样您就可以从那里将其传递到页面助手中。 This could be achieved either by creating a new ViewModel which contains the ProductSearchViewModel as well as your Paged List, or simply placing into ViewData before returning the view. 这可以通过创建一个包含ProductSearchViewModel以及您的分页列表的新ViewModel来实现,也可以在返回视图之前简单地放入ViewData中。

2.) Move the paging to the main view (Index) so you can pass the ProductSearchViewModel along with the page number. 2.)将分页移动到主视图(索引),以便您可以将ProductSearchViewModel和页码一起传递。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM