2023年6月21日发(作者:)
中实现分页⽅法⽅法⼀:使⽤传统的sql语句实现分页, public class UserprintDao如下
/// /// 取得⽤户申请记录列表(按分页) /// /// /// /// /// public List GetUserReportListByUserId(Userprint userprint) { string sql = "select * from (select row_number() over(order by id desc) as num,* from userprint where userid=@userid "; if (!OrEmpty(ame)) { sql += " and printname like @printname"; } sql += ") as t where >=@start and <=@end"; return DoUserprintList(sql, userprint); }//统⼀函数返回打印列表 public List DoUserprintList(string sql, Userprint userprint) { try { using (SqlConnection conn = n()) { return (sql, userprint).ToList(); } } catch (Exception) { return null; } } //统⼀函数返回记录总数 public int DoRecordCount(string sql,Userprint userprint) { try { using (SqlConnection conn = n()) { return eScalar(sql, userprint).ToString().ToInt32(); } } catch (Exception) { return 0; }
}/// /// 取⽤户申请记录列表总数 /// /// /// public int GetUserReportRecordCount(Userprint userprint) { string sql = "select count(1) from userprint where userid=@userid"; SqlParameter[] para; if (!OrEmpty(ame)) { sql += " and printname like @printname"; } return DoRecordCount(sql, userprint); }控制器中如下 public ActionResult ReprotManage() { Userprint tempuserprint = new Userprint(); var keys = Request["keys"]; if (!OrEmpty(keys)) { ame = "%"+keys+"%"; }
= getUserBySession().Id; int pageIndex = Request["pageIndex"] == null ? 1 : Request["pageIndex"].ToInt32(); int pageCount = GetPageCount(tempuserprint, pageSize, rReportRecordCount); int start = (pageIndex - 1) * pageSize + 1; int end = pageIndex * pageSize; = start; = end; = rReportListByUserId(tempuserprint); dex = pageIndex; unt = pageCount; return View(); } //计算分页总数,使⽤委托合成⼀个函数 public int GetPageCount(Userprint userprint, int pageSize, Func GetRecordCount) { return g((double)GetRecordCount(userprint) / pageSize).ToString().ToInt32(); }在view视图添加分页代码,代码如下: @(eBarToUlLi(dex, unt))
using System;using c;using ;using ;using ;namespace Print{ public class PageBar { public static string GetPageBarToUlLi(int pageIndex, int pageCount) { if (pageCount <= 1) { return ; } int start = pageIndex - 5; start = start < 1 ? 1 : start; int end = start + 9; end = end > pageCount ? pageCount : end; StringBuilder sb = new StringBuilder(); (""); return ng(); } public static string GetPageBar(int pageIndex, int pageCount) { if (pageCount <= 1) { return ; } int start = pageIndex - 5; start = start < 1 ? 1 : start; int end = start + 9; end = end > pageCount ? pageCount : end; StringBuilder sb = new StringBuilder(); ("第⼀页"); for (int i = start; i <= end; i++) { if (i == pageIndex) (" " + i + " "); else { (("{0}", i)); } } (("最后⼀页", pageCount)); return ng(); } }}写的有点乱,这是从项⽬中复制出来的,其中使⽤到了ORM框架Dapper, js库jquery,UI美化:bootstrip,⾃⾏添加。效果图如下:⽅法⼆:使⽤第三⽅库PageList,添加引⽤ ,使⽤NuGet添加:PagedList,同时也会添加在控制器中实现如下代码: public ActionResult Index(SearchInfo info, int page = 1){ var result=(from p in ints select p).OrderByDescending(m => e).ToPagedList(page, 17); if (Request()) return PartialView("_statislist", statis); return View(result);}在主视图中代码: @l("_statislist", Model)
部分视图_代码如下:@using @model IPagedList
@istPager(Model,page=>("Index",new{page}),c)
⽂印名称 | 打印⾊彩 | 单双⾯ |
纸张⼤⼩ |
@foreach (var item in Model) { @yFor(modelItem => ame) | @yFor(modelItem => olor) | @yFor(modelItem => ode) |
@yFor(modelItem => agersize) |
}
为分页添加样式,此代码放在主视图就⾏效果如下:
PageList分页功能很强⼤,但是在实际使⽤中经常与查询在⼀起使⽤,如果对查询结果操作分页时,发现后⾯分页全乱了,最终想了⼀个办法解决,本⼈认为这样⽐较⿇烦,但可以解决问题。思路就是:把查询的条件在页⾯与后台间传递。以显⽰⽤户信息为例,利⽤PagedLilst实现查询+分页:1.创建类UserAndPagedList,收集后台所有传递的信息namespace { public class UserAndPagedList { public User User { get; set; } public IPagedList Users { get; set; } }}Resultpublic ActionResult List(User user, int page = 1) { IPagedList list; if (OrEmpty()) list = (u => vel != 2).OrderByDescending(u => ertime).ToPagedList(page, 2); else list = (u => vel != 2).Where(u => ns()).OrderByDescending(u => ertime).ToPagedList(page, 2); UserAndPagedList objModel = new UserAndPagedList() { User = user, Users = list }; return View(objModel); }@using @using @model dPagedList@{ = "List"; Layout = "~/Views/Shared/";}@using (orm("List", "Admin", new AjaxOptions() { UpdateTargetId = "userlist", HttpMethod = "post", InsertionMode = e })){ }@l("_userlist", Model); //视图4.部分视图_userlist@using @using @model dPagedList @istPager(, page => ("List", new { page, }), c)
⽤户名 | ⽤户类型 | 操作 |
@foreach (var item in ) { @yFor(modelItem => ) | @(vel == 2 ? "管理员" : vel == 1 ? "教员" : "学⽣") | @Link("编辑", "Edit", new { id = }) @Link("删除", "Delete", new { id = }, new AjaxOptions() { Confirm = "确定要删除吗?", OnSuccess = "afterOk" }) |
}
关键部位⽤绿⾊作标记了,
下⾯再来⼀个⽤查询+分页的例⼦,不过这次是在页码上作点⼿脚,分页时使⽤ajax提交,这样分页与列表部分就实现异步提交了,这个的实现刚开始⾛了不少弯路,实现如下:页⾯上有两块,⼀块是查询条件,另⼀块是显⽰查询列表,列表的设计是放在分部视图中,页码也是分部视图中,代码如下:Controllers public ActionResult ManageCourse(Courseware cw, int firstdirectoryid = 0, int page = 1) {//第⼀次加载数据 ir = new SelectList( y(m => ) .Select(m => new { id = , title = }).ToList() , "id", "title"); type = new SelectList( ttypes .Select(m => new { id = , name = }).ToList() , "id", "name"); var list = (from c in wares orderby directoryid, select c).ToPagedList(page, 16); return View(list); }//分部视图 public ActionResult SysManageCourse(Courseware cw, int firstdirectoryid = 0, int page = 1) { var list = (x => != 0); if (firstdirectoryid != 0) { if (directoryid != 0) { list = (x => directoryid == directoryid); } else { list = (x => irectoryid == firstdirectoryid); } } if (ttypeid != 0) { list = (x => ttypeid == ttypeid); } if (!OrEmpty()) { list = (x => ns()); } var obj = y(x => directoryid).ThenBy(x => ).ToPagedList(page, 16); return PartialView("_courselist", obj); }主@using @model List@{ = "ManageCourse"; Layout = "~/Views/Shared/";}@using (orm("SysManageCourse", "Teacher", new AjaxOptions() { UpdateTargetId = "divlist", HttpMethod = "post", InsertionMode = e }, new { @class = "form-inline" })){ @rgeryToken() @tionSummary(true) }
@l("_courselist", Model)
分部视图--_@using @model List @istPager(Model, page => ("SysManageCourse", new { page }), c)
@*@istPager(Model, page => ("SysManageCourse", new { page }), new PagedListRenderOptions() { LinkToFirstPageFormat = "⾸页", LinkToNextPageFormat = "下⼀页", LinkToPreviousPageFormat = "上⼀页", LinkToLastPageFormat = "末页", DisplayItemSliceAndTotal = true, ItemSliceAndTotalFormat = "共有{2}页", MaximumPageNumbersToDisplay = 6 })*@
操作 | 序号 | 类型 | 标题 |
@foreach (var item in Model) { @Link("编辑", "EditCourse", new { id = }) | @Link("详细", "DetailsCourse", new { id = }) | @Link("删除", "DeleteCourse", new { id = }, new AjaxOptions() { Confirm = "确定要删除吗?", HttpMethod = "post", OnSuccess = "afterOk" }) | @yFor(modelItem => ) | @yFor(modelItem => ) | @yFor(modelItem => ) |
}
代码中有多余的内容,由于是直接复制过来,⾃⼰挑着看,要注意的是在分部视图中对页码的click事件(就是上⾯绿⾊的部分,屏蔽点击直接跳转,⽤异步ajax跳转)⼀定要写在分部视图中,如果写在主视图中那就惨了,点击页⾯会直接跳转,根本就不经过JS,原因时ajax分页后返回数据重写了分部视图中的所有元素,前⾯的JS对后⾯重写的不起作⽤,所以⼀定要写在分部视图中,刚开始我就是把它写在了主视图中,折腾1个⼩时才明⽩。$.post提交时把查询块form中的数据传递给了后台。
另外提供两种分页⽅式:
@istPager(Model, page => ("SysManageCourse", new { page }), c)
@istPager(Model, page => ("SysManageCourse", new { page }), new PagedListRenderOptions() { LinkToFirstPageFormat = "⾸页", LinkToNextPageFormat = "下⼀页", LinkToPreviousPageFormat = "上⼀页", LinkToLastPageFormat = "末页", DisplayItemSliceAndTotal = true, ItemSliceAndTotalFormat = "共有{2}页", MaximumPageNumbersToDisplay = 6 }
2023年6月21日发(作者:)
中实现分页⽅法⽅法⼀:使⽤传统的sql语句实现分页, public class UserprintDao如下
/// /// 取得⽤户申请记录列表(按分页) /// /// /// /// /// public List GetUserReportListByUserId(Userprint userprint) { string sql = "select * from (select row_number() over(order by id desc) as num,* from userprint where userid=@userid "; if (!OrEmpty(ame)) { sql += " and printname like @printname"; } sql += ") as t where >=@start and <=@end"; return DoUserprintList(sql, userprint); }//统⼀函数返回打印列表 public List DoUserprintList(string sql, Userprint userprint) { try { using (SqlConnection conn = n()) { return (sql, userprint).ToList(); } } catch (Exception) { return null; } } //统⼀函数返回记录总数 public int DoRecordCount(string sql,Userprint userprint) { try { using (SqlConnection conn = n()) { return eScalar(sql, userprint).ToString().ToInt32(); } } catch (Exception) { return 0; }
}/// /// 取⽤户申请记录列表总数 /// /// /// public int GetUserReportRecordCount(Userprint userprint) { string sql = "select count(1) from userprint where userid=@userid"; SqlParameter[] para; if (!OrEmpty(ame)) { sql += " and printname like @printname"; } return DoRecordCount(sql, userprint); }控制器中如下 public ActionResult ReprotManage() { Userprint tempuserprint = new Userprint(); var keys = Request["keys"]; if (!OrEmpty(keys)) { ame = "%"+keys+"%"; }
= getUserBySession().Id; int pageIndex = Request["pageIndex"] == null ? 1 : Request["pageIndex"].ToInt32(); int pageCount = GetPageCount(tempuserprint, pageSize, rReportRecordCount); int start = (pageIndex - 1) * pageSize + 1; int end = pageIndex * pageSize; = start; = end; = rReportListByUserId(tempuserprint); dex = pageIndex; unt = pageCount; return View(); } //计算分页总数,使⽤委托合成⼀个函数 public int GetPageCount(Userprint userprint, int pageSize, Func GetRecordCount) { return g((double)GetRecordCount(userprint) / pageSize).ToString().ToInt32(); }在view视图添加分页代码,代码如下: @(eBarToUlLi(dex, unt))
using System;using c;using ;using ;using ;namespace Print{ public class PageBar { public static string GetPageBarToUlLi(int pageIndex, int pageCount) { if (pageCount <= 1) { return ; } int start = pageIndex - 5; start = start < 1 ? 1 : start; int end = start + 9; end = end > pageCount ? pageCount : end; StringBuilder sb = new StringBuilder(); (""); return ng(); } public static string GetPageBar(int pageIndex, int pageCount) { if (pageCount <= 1) { return ; } int start = pageIndex - 5; start = start < 1 ? 1 : start; int end = start + 9; end = end > pageCount ? pageCount : end; StringBuilder sb = new StringBuilder(); ("第⼀页"); for (int i = start; i <= end; i++) { if (i == pageIndex) (" " + i + " "); else { (("{0}", i)); } } (("最后⼀页", pageCount)); return ng(); } }}写的有点乱,这是从项⽬中复制出来的,其中使⽤到了ORM框架Dapper, js库jquery,UI美化:bootstrip,⾃⾏添加。效果图如下:⽅法⼆:使⽤第三⽅库PageList,添加引⽤ ,使⽤NuGet添加:PagedList,同时也会添加在控制器中实现如下代码: public ActionResult Index(SearchInfo info, int page = 1){ var result=(from p in ints select p).OrderByDescending(m => e).ToPagedList(page, 17); if (Request()) return PartialView("_statislist", statis); return View(result);}在主视图中代码: @l("_statislist", Model)
部分视图_代码如下:@using @model IPagedList
@istPager(Model,page=>("Index",new{page}),c)
⽂印名称 | 打印⾊彩 | 单双⾯ |
纸张⼤⼩ |
@foreach (var item in Model) { @yFor(modelItem => ame) | @yFor(modelItem => olor) | @yFor(modelItem => ode) |
@yFor(modelItem => agersize) |
}
为分页添加样式,此代码放在主视图就⾏效果如下:
PageList分页功能很强⼤,但是在实际使⽤中经常与查询在⼀起使⽤,如果对查询结果操作分页时,发现后⾯分页全乱了,最终想了⼀个办法解决,本⼈认为这样⽐较⿇烦,但可以解决问题。思路就是:把查询的条件在页⾯与后台间传递。以显⽰⽤户信息为例,利⽤PagedLilst实现查询+分页:1.创建类UserAndPagedList,收集后台所有传递的信息namespace { public class UserAndPagedList { public User User { get; set; } public IPagedList Users { get; set; } }}Resultpublic ActionResult List(User user, int page = 1) { IPagedList list; if (OrEmpty()) list = (u => vel != 2).OrderByDescending(u => ertime).ToPagedList(page, 2); else list = (u => vel != 2).Where(u => ns()).OrderByDescending(u => ertime).ToPagedList(page, 2); UserAndPagedList objModel = new UserAndPagedList() { User = user, Users = list }; return View(objModel); }@using @using @model dPagedList@{ = "List"; Layout = "~/Views/Shared/";}@using (orm("List", "Admin", new AjaxOptions() { UpdateTargetId = "userlist", HttpMethod = "post", InsertionMode = e })){ }@l("_userlist", Model); //视图4.部分视图_userlist@using @using @model dPagedList @istPager(, page => ("List", new { page, }), c)
⽤户名 | ⽤户类型 | 操作 |
@foreach (var item in ) { @yFor(modelItem => ) | @(vel == 2 ? "管理员" : vel == 1 ? "教员" : "学⽣") | @Link("编辑", "Edit", new { id = }) @Link("删除", "Delete", new { id = }, new AjaxOptions() { Confirm = "确定要删除吗?", OnSuccess = "afterOk" }) |
}
关键部位⽤绿⾊作标记了,
下⾯再来⼀个⽤查询+分页的例⼦,不过这次是在页码上作点⼿脚,分页时使⽤ajax提交,这样分页与列表部分就实现异步提交了,这个的实现刚开始⾛了不少弯路,实现如下:页⾯上有两块,⼀块是查询条件,另⼀块是显⽰查询列表,列表的设计是放在分部视图中,页码也是分部视图中,代码如下:Controllers public ActionResult ManageCourse(Courseware cw, int firstdirectoryid = 0, int page = 1) {//第⼀次加载数据 ir = new SelectList( y(m => ) .Select(m => new { id = , title = }).ToList() , "id", "title"); type = new SelectList( ttypes .Select(m => new { id = , name = }).ToList() , "id", "name"); var list = (from c in wares orderby directoryid, select c).ToPagedList(page, 16); return View(list); }//分部视图 public ActionResult SysManageCourse(Courseware cw, int firstdirectoryid = 0, int page = 1) { var list = (x => != 0); if (firstdirectoryid != 0) { if (directoryid != 0) { list = (x => directoryid == directoryid); } else { list = (x => irectoryid == firstdirectoryid); } } if (ttypeid != 0) { list = (x => ttypeid == ttypeid); } if (!OrEmpty()) { list = (x => ns()); } var obj = y(x => directoryid).ThenBy(x => ).ToPagedList(page, 16); return PartialView("_courselist", obj); }主@using @model List@{ = "ManageCourse"; Layout = "~/Views/Shared/";}@using (orm("SysManageCourse", "Teacher", new AjaxOptions() { UpdateTargetId = "divlist", HttpMethod = "post", InsertionMode = e }, new { @class = "form-inline" })){ @rgeryToken() @tionSummary(true) }
@l("_courselist", Model)
分部视图--_@using @model List @istPager(Model, page => ("SysManageCourse", new { page }), c)
@*@istPager(Model, page => ("SysManageCourse", new { page }), new PagedListRenderOptions() { LinkToFirstPageFormat = "⾸页", LinkToNextPageFormat = "下⼀页", LinkToPreviousPageFormat = "上⼀页", LinkToLastPageFormat = "末页", DisplayItemSliceAndTotal = true, ItemSliceAndTotalFormat = "共有{2}页", MaximumPageNumbersToDisplay = 6 })*@
操作 | 序号 | 类型 | 标题 |
@foreach (var item in Model) { @Link("编辑", "EditCourse", new { id = }) | @Link("详细", "DetailsCourse", new { id = }) | @Link("删除", "DeleteCourse", new { id = }, new AjaxOptions() { Confirm = "确定要删除吗?", HttpMethod = "post", OnSuccess = "afterOk" }) | @yFor(modelItem => ) | @yFor(modelItem => ) | @yFor(modelItem => ) |
}
代码中有多余的内容,由于是直接复制过来,⾃⼰挑着看,要注意的是在分部视图中对页码的click事件(就是上⾯绿⾊的部分,屏蔽点击直接跳转,⽤异步ajax跳转)⼀定要写在分部视图中,如果写在主视图中那就惨了,点击页⾯会直接跳转,根本就不经过JS,原因时ajax分页后返回数据重写了分部视图中的所有元素,前⾯的JS对后⾯重写的不起作⽤,所以⼀定要写在分部视图中,刚开始我就是把它写在了主视图中,折腾1个⼩时才明⽩。$.post提交时把查询块form中的数据传递给了后台。
另外提供两种分页⽅式:
@istPager(Model, page => ("SysManageCourse", new { page }), c)
@istPager(Model, page => ("SysManageCourse", new { page }), new PagedListRenderOptions() { LinkToFirstPageFormat = "⾸页", LinkToNextPageFormat = "下⼀页", LinkToPreviousPageFormat = "上⼀页", LinkToLastPageFormat = "末页", DisplayItemSliceAndTotal = true, ItemSliceAndTotalFormat = "共有{2}页", MaximumPageNumbersToDisplay = 6 }
发布评论