佛山微信网站建设哪家好,零基础可以做网站吗,娄底网站建设公司,网站域名如何注册大家好#xff0c;我是雄雄#xff0c;欢迎关注公众号#xff1a;雄雄的小课堂。
今天#xff0c;分享的是asp.net中条件查询分页的小案例。
如下图所示#xff1a; 各个功能模块均已标注#xff0c;先大致介绍一下业务。
\1. 点击左侧图书类别#xff0c;根绝类别编…大家好我是雄雄欢迎关注公众号雄雄的小课堂。
今天分享的是asp.net中条件查询分页的小案例。
如下图所示 各个功能模块均已标注先大致介绍一下业务。
\1. 点击左侧图书类别根绝类别编号在右侧查询显示该类别中的所有图书列表分页查询
\2. 下拉排序方式可以根据价格排序和出版日期排序。当下拉列表改变值时图书列表按照排序方式改变。
\3. 右上角显示为分页信息左箭头表示上一页右箭头表示下一页。
数据访问层DAL
1.需要根据“类别编号”“当前页”“页大小”以及“排序方式”查询图书列表代码如下
// 1.当前页页大小类别排序依据--》得到数据集合public ListBooks GetPageBooks(int currPage, int pageSize, string orderBy, int cateId){string sql select top pageSize * from Books where id not in (select top (currPage - 1) * pageSize id from Books where CategoryId cateId order by orderBy ) and CategoryId cateId order by orderBy ;ListBooks bList new ListBooks();SqlDataReader dr SqlHelper.ExecuteReader(sql, null);while (dr.Read()){Books b new Books();b.Id Convert.ToInt32(dr[0]);b.Title dr[1].ToString();b.Author dr[2].ToString();b.PublisherId Convert.ToInt32(dr[3].ToString());b.PublishDate Convert.ToDateTime(dr[4].ToString());b.ISBN dr[5].ToString();b.UnitPrice Convert.ToDouble(dr[6].ToString());b.ContentDescription dr[5].ToString();b.CategoryId Convert.ToInt32(dr[0]);b.Clicks Convert.ToInt32(dr[0]);bList.Add(b);}return bList;}2.需要根据类别查询总记录数从而在前台计算总页数代码如下
//总记录数//类别public int GetTotalNum(int cateId){int rel 0;string sql select count(*) from Books where CategoryId CategoryId;SqlParameter[] param { new SqlParameter(CategoryId, cateId) };rel Convert.ToInt32(SqlHelper.ExecuteScalar(sql, param));return rel;}业务逻辑层BLL
将DAL的两个方法可以结合起来将数据集合图书列表和总记录数根据类别查询带出去在控制器中获取代码如下
public ListBooks GetPageList(int currPage, int pageSize, string orderBy, int cateId, out int totalNum){totalNum bs.GetTotalNum(cateId);return bs.GetPageBooks(currPage, pageSize, orderBy, cateId);}前台业务分析
点击类别展示图书列表比较简单这里一带而过不细说代码如下利用了内联视图
%ListBookShop.Models.Categories cateList ViewData[cateList] as ListBookShop.Models.Categories;foreach(BookShop.Models.Categories cate in cateList){%li%Html.ActionLink(cate.Name, BooksList, Books, new { idcate.Id}, null)%/li
%}%图书列表页图书列表通过强类型视图遍历展示。
接下来我们可以将当前页、排序方式放在form表单中往控制器中传值不放也可以利用jQuery直接获取值稍微麻烦点当改变下拉列表的值时提交form表单form表单的代码如下
form action%Url.Action(BooksList, Books, new {idViewData[cateid]})% methodpost idmainForminput typehidden nameorderBy value% ViewData[orderBy] %/input typehidden namecurrPage value% ViewData[currPage] %//form相关jquery代码如下
script typetext/javascript//jQuery代码$(function () {var orderBy $(input[nameorderBy]).val();$(select[namelist_type]).val(orderBy);$(select[namelist_type]).change(function () {$(input[nameorderBy]).val($(this).val());$(input[namecurrPage]).val(1);$(#mainForm).submit();});});/script上一页
点击上一页时获取表单中当前页的值然后进行判断如果当前页是第一页则无序操作否则当前也减1最后提交表单。
//上一页$(#turn_pre).click(function () {//当前页减1var currPage $(input[namecurrPage]).val();if (currPage 1) {currPage currPage-1;}$(input[namecurrPage]).val(currPage);$(#mainForm).submit();});下一页
点击下一页时获取表单中当前页的值还需要获取控制器往页面传递的总页数然后进行判断如果当前页等于总页数则无序操作否则当前页加1最后提交表单。 //下一页$(#turn_next).click(function () {//当前页减1var currPage $(input[namecurrPage]).val();var totalPage %ViewData[totalPage]%;if(totalPage!currPage){currPage parseInt(currPage) 1;}$(input[namecurrPage]).val(currPage);$(#mainForm).submit();});控制器BooksController
首先根据前台页面的需求我们可以知悉控制器的动作方法中最少需要【当前页】【页大小】【类别编号】【排序方式】几个值【当前页】和【排序方式】我们可以直接从form表单中获取【类别编号】可以从路由中获取【页大小】直接写成死的就可以代码如下 public ActionResult BooksList() {//类别号int cateid Convert.ToInt32(RouteData.Values[id]);//排序依据string orderBy Request.Form[orderBy] null ? PublishDate : Request.Form[orderBy];//当前页int currPage Request.Form[currPage] null ? 1 : Convert.ToInt32(Request.Form[currPage]);//页大小int pageSize 5;int totalNum 0;ListBooks bList bm.GetPageList(currPage, pageSize, orderBy, cateid, out totalNum);ViewData[currPage] currPage;ViewData[orderBy] orderBy;ViewData[cateid] cateid;int totalPage totalNum % pageSize 0 ? totalNum / pageSize : (totalNum / pageSize) 1;ViewData[totalPage] totalPage;return View(bList);}