Asp.net mvc ASP.NET MVC应用程序中的分页
我想在我的应用程序中实现Asp.net mvc ASP.NET MVC应用程序中的分页,asp.net-mvc,pagination,Asp.net Mvc,Pagination,我想在我的应用程序中实现分页 我的控制器 public ActionResult Leading(string type, int? pageNumber) { IEnumerable<LeadingClass> data; LeadingDatabaseHandle DatabaseHandle = new LeadingDatabaseHandle (); if (type.HasValue) { data = DatabaseHa
分页
我的控制器
public ActionResult Leading(string type, int? pageNumber)
{
IEnumerable<LeadingClass> data;
LeadingDatabaseHandle DatabaseHandle = new LeadingDatabaseHandle ();
if (type.HasValue)
{
data = DatabaseHandle(type).ToPagedList(pageNumber ?? 1, 10);
}
else
{
data = DatabaseHandle.LeadingAll().ToPagedList(pageNumber ?? 1, 10);
}
LeadingFilterVM model = new LeadingFilterVM
{
Type = type,
TypeList = new List<SelectListItem>
{
new SelectListItem{ Text = "General", Value = "1" },
new SelectListItem{ Text = "Advance", Value = "2" }
},
Leadings = data
};
return View(model);
}
我的视图模型
public class LeadingFilterVM
{
public string Type { get; set; }
public IEnumerable<SelectListItem> TypeList { get; set; }
public IEnumerable<LeadingClass> Leadings { get; set; }
}
public class LeadingFilterVM
{
公共字符串类型{get;set;}
公共IEnumerable类型列表{get;set;}
公共IEnumerable引线{get;set;}
}
我的看法呢
@model Website.Models.Leading.ViewModels.LeadingFilterVM
@using PagedList;
@using PagedList.Mvc;
@using (Html.BeginForm("Leading", "Home", FormMethod.Get))
{
@Html.DisplayNameFor(m => m.Leadings.FirstOrDefault().Type)
@Html.DropDownListFor(m => m.Type, Model.TypeList, "All Type", new { @class = "form-control"})
}
<table class="table table-hover">
<tr>
<th>@Html.DisplayNameFor(m => m.Leadings.FirstOrDefault().Id)</th>
<th>@Html.DisplayNameFor(m => m.Leadings.FirstOrDefault().Name)</th>
</tr>
@foreach (var item in Model.Leadings)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.Id)</td>
<td>@Html.DisplayFor(modelItem => item.Name)</td>
</tr>
}
</table>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, pageNumber => Url.Action("Leading", new
{
pageNumber
}))
@model.Website.Models.Leading.ViewModels.LeadingFilterVM
@使用页面列表;
@使用PagedList.Mvc;
@使用(Html.BeginForm(“Leading”、“Home”、FormMethod.Get))
{
@DisplayNameFor(m=>m.Leadings.FirstOrDefault().Type)
@DropDownListFor(m=>m.Type,Model.TypeList,“所有类型”,新的{@class=“form control”})
}
@DisplayNameFor(m=>m.Leadings.FirstOrDefault().Id)
@DisplayNameFor(m=>m.Leadings.FirstOrDefault().Name)
@foreach(模型领导中的var项目)
{
@DisplayFor(modeleItem=>item.Id)
@DisplayFor(modelItem=>item.Name)
}
@Model.PageCount的@页(Model.PageCountUrl.Action(“Leading”),新
{
页码
}))
它正在抛出错误:编译器错误消息:
CS1061:“LeadingFilterVM”不包含“PageNumber”的定义,并且找不到接受“LeadingFilterVM”类型的第一个参数的扩展方法“PageNumber”(是否缺少using指令或程序集引用?)
有人能为我指点迷津吗?视图中的模型是
LeadingFilterVM
,该模型不包含页码的属性
请注意,代码还有其他问题,需要将视图模型更改为
public class LeadingFilterVM
{
public string Type { get; set; }
public IEnumerable<SelectListItem> TypeList { get; set; }
public IPagedList<LeadingClass> Leadings { get; set; } //IPagedList, not IEnumerable
}
并将方法的签名更改为
public ActionResult Leading(int? type, int? pageNumber)
您还需要更改代码以生成SelectList
TypeList = new List<SelectListItem>
{
new SelectListItem{ Text = "General", Value = "General" },
new SelectListItem{ Text = "Advance", Value = "Advance" }
},
消息非常明显:PageNumber
属性在LeadingFilterVM
viewmodel类中不存在。从PagedListPager
检查您是否正确使用了PageNumber
。从您在问题中共享的代码中,您的LeadingFilterVM
类没有PageNumber
属性。如果尚未定义该属性,为什么要使用它?
public ActionResult Leading(int? type, int? pageNumber)
TypeList = new List<SelectListItem>
{
new SelectListItem{ Text = "General", Value = "General" },
new SelectListItem{ Text = "Advance", Value = "Advance" }
},
public ActionResult Leading(string type, int? pageNumber)
{
IQueryable<LeadingClass> data = db.LeadingClass;
if (type != null)
{
data = data.Where(x => x.Type == type.Value);
}
LeadingFilterVM model = new LeadingFilterVM
{
....
Leadings = data..ToPagedList(pageNumber ?? 1, 10)
};
return View(model);
}