asp.net中条件查询+分页

发布于 2021-04-06 08:04

今天,分享的是asp.net中条件查询+分页的小案例。

如下图所示:

各个功能模块均已标注,先大致介绍一下业务。

  1. 左侧图书类别,根绝类别编号在右侧查询显示该类别中的所有图书列表(分页查询)
  2. 下拉排序方式,可以根据价格排序和出版日期排序。当下拉列表改变值时,图书列表按照排序方式改变。
  3. 角显示为分页信息,左箭头表示上一页,右箭头表示下一页。

数据访问层(DAL):

1.需要根据“类别编号”“当前页”“页大小”以及“排序方式”查询图书列表,代码如下:

 //  1.当前页,页大小,类别,排序依据--》得到数据集合        public List<Books> 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 + "";            List<Books> bList = new List<Books>();            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 List<Books> GetPageList(int currPage, int pageSize, string orderBy, int cateId, out int totalNum)        {            totalNum = bs.GetTotalNum(cateId);            return bs.GetPageBooks(currPage, pageSize, orderBy, cateId);        }

前台业务分析:

<%    List<BookShop.Models.Categories> cateList = ViewData["cateList"] as List<BookShop.Models.Categories>;    foreach(BookShop.Models.Categories cate in cateList){                %>                    <li><%=Html.ActionLink(cate.Name, "BooksList", "Books", new { id=cate.Id}, null)%></li><%            }         %>

图书列表页:图书列表通过强类型视图遍历展示。

接下来,我们可以将当前页、排序方式放在form表单中往控制器中传值(不放也可以,利用jQuery直接获取值,稍微麻烦点),当改变下拉列表的值时,提交form表单,form表单的代码如下:

<form action="<%=Url.Action("BooksList", "Books", new  {id=ViewData["cateid"]})%>" method="post" id="mainForm">    <input type="hidden" name="orderBy"  value="<% =ViewData["orderBy"] %>"/>    <input type="hidden" name="currPage" value="<% =ViewData["currPage"] %>"/></form>

相关jquery代码如下:

 <script type="text/javascript">        //jQuery代码        $(function () {            var orderBy = $("input[name='orderBy']").val();            $("select[name='list_type']").val(orderBy);            $("select[name='list_type']").change(function () {                $("input[name='orderBy']").val($(this).val());                $("input[name='currPage']").val(1);                $("#mainForm").submit();            });                    });</script>

上一页:

 //上一页            $("#turn_pre").click(function () {                //当前页减1                var currPage = $("input[name='currPage']").val();                if (currPage > 1) {                        currPage = currPage-1;                }                $("input[name='currPage']").val(currPage);                $("#mainForm").submit();            });

下一页:

  //下一页            $("#turn_next").click(function () {                //当前页减1                var currPage = $("input[name='currPage']").val();                var totalPage = <%=ViewData["totalPage"]%>;                               if(totalPage!=currPage){                    currPage = parseInt(currPage) + 1;                }                $("input[name='currPage']").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;            List<Books> 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);        }

往期精彩
表单提交报错405的解决方式 2021-04-04
喜欢这种刺激! 2021-04-02
太真实了!!! 2021-04-01
按下电源后的几秒钟,CPU在干嘛? 2021-03-31
完蛋,被竞业限制了! 2021-03-30

点分享

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材