【发布时间】:2016-02-17 11:28:16
【问题描述】:
我在我的应用程序中使用 PagedList.MVC 进行分页。这工作正常。分页工作正常,OrderBy 下拉列表工作正常。当我从下拉列表中选择值时,它会给出所需的排序结果。我的意思是,如果我选择 A-Z,那么它会按升序对项目进行排序,但是当我单击第二页或下一页时,它不会对任何项目进行排序,并且 url 会变成这样
http://localhost:41213/Home/Products?page=2&pageSize=6
还有我怎样才能使这个 pageSize=6 成为动态的?我希望将其放入 {5,10,15,20} 之类的下拉列表中,当用户选择一个值时,它应该显示所选的项目数。
控制器
[HttpGet]
public ActionResult Products(int? OrderBy, int page=1, int pageSize=6)
{
private Shopping db = new Shopping();
switch (OrderBy)
{
case 1:
List<Product> listProductsasc = db.Products.OrderBy(p => p.Name).ToList();
PagedList<Product> modelasc = new PagedList<Product>(listProductsasc, page, pageSize);
return View(modelasc);
case 2:
List<Product> listProductsdesc = db.Products.OrderByDescending(p => p.Name).ToList();
PagedList<Product> modeldesc = new PagedList<Product>(listProductsdesc, page, pageSize);
return View(modeldesc);
default:
List<Product> listProducts = db.Products.ToList();
PagedList<Product> modeldefault = new PagedList<Product>(listProducts, page, pageSize);
return View(modeldefault);
}
}
查看
@model PagedList.IPagedList<FypStore.Models.Product>
@using PagedList.Mvc
<div class="row">
<div class="col-sm-6">
@using (Html.BeginForm("Products", "Home", FormMethod.Get, new { id = "Form1" }))
{
<div class="col-sm-8">
Sort by:
@Html.DropDownList("OrderBy", new List<SelectListItem>
{
new SelectListItem{ Text="A-Z", Value = "1" },
new SelectListItem{ Text="Z-A", Value = "2" }
}, "-- Order By --")
</div>
<div class="col-sm-4">
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Filter" />
</div>
</div>
</div>
}
</div>
</div>
<br />
@Html.PagedListPager(Model, page => Url.Action("Products", new { page, pageSize = Model.PageSize }))
Showing @Model.FirstItemOnPage to @Model.LastItemOnPage of @Model.TotalItemCount Products
【问题讨论】:
-
我在 URL 中没有看到 sort 参数,这意味着您的排序不会持续到下一页。尝试在 URL 中添加选定的排序值
-
是的,如果我访问此网址localhost:41213/Home/…,那么它可以通过分页进行良好的排序。但是我怎样才能通过 OrderBy 选定的值?
-
修改路由参数为
new { new { OrderBy = ViewBag.SortOrder, page, pageSize = Model.PageSize },在控制器中,在返回视图前添加ViewBag.SortOrder = OrderBy;。但如果视图模型具有您需要的所有属性,那就更好了。 -
@StephenMuecke 你的评论对我很有帮助!非常感谢!。我让它工作了。你能给我一个关于你所说的视图模型的例子吗?我是初学者
标签: c# asp.net asp.net-mvc asp.net-mvc-4