asp.net中条件查询+分页

大家好,我是雄雄,欢迎关注公众号:雄雄的小课堂。

今天,分享的是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>

上一页:

点击上一页时,获取表单中当前页的值,然后进行判断,如果当前页是第一页,则无序操作,否则当前也减1,最后提交表单。

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

下一页:

点击下一页时,获取表单中当前页的值,还需要获取控制器往页面传递的总页数,然后进行判断,如果当前页等于总页数,则无序操作,否则当前页加1,最后提交表单。

 //下一页
           $("#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);
        }


原文地址:https://blog.51cto.com/u_12718584/2853096

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


数组的定义 Dim MyArray MyArray = Array(1‚5‚123‚12‚98) 可扩展数组 Dim MyArray() for i = 0 to 10
\'参数: \'code:要检测的代码 \'leixing:html或者ubb \'nopic:代码没有图片时默认值
演示效果: 代码下载: 点击下载
环境:winxp sp2 ,mysql5.0.18,mysql odbc 3.51 driver 表采用 myisam引擎。access 2003  不同的地方: 
其实说起AJAX的初级应用是非常简单的,通俗的说就是客户端(javascript)与服务端(asp或php等)脚本语言的数据交互。
<% ’判断文件名是否合法 Function isFilename(aFilename)  Dim sErrorStr,iNameLength,i  isFilename=TRUE
在调用的时候加入判断就行了. {aspcms:navlist type=0 } {if:[navlist:i]<6} < li><a href=\"[navlist:link]\" target=\"_top\">[navlist:name]</a> </li>
导航栏调用 {aspcms:navlist type=0}     <a href=\"[navlist:link]\">[navlist:name]</a>
1.引入外部文件: {aspcms:template src=infobar.html} 2.二级下拉菜单 <ul class=\"nav\">
downpic.asp页面:  <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
Cookies是数据包,可以让网页具有记忆功能,在某台电脑上记忆一定的信息。Cookies的工作原理是,第一次由服务器端写入到客户端的系统中。以后每次访问这个网页,都是先由客户端将Cookies发送到服务器端,再由服务器端
很简单,在需要调用的地方用这种模式 {aspcms:content sort={aspcms:sortid} num=17 order=isrecommend}
网站系统使用ACCESS数据库时,查询时怎么比较日期和时间呢?为什么常常比较出来却是错误的呢?比如早的日期比迟的日期大?
str1=\"1235,12,23,34,123,21,56,74,1232\" str2=\"12\" 问题:如何判断str2是否存在str1中,要求准确找出12,不能找出str1中的1235、123、1232
实例为最新版本的kindeditor 4.1.5. 主要程序: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)
用ASP实现搜索引擎的功能是一件很方便的事,可是,如何实现类似3721的智能搜索呢?比如,当在搜索条件框内输入“中国人民”时,自动从中提取“中国”、“人民”等关键字并在数据库内进行搜索。看完本文后,你就可以发
首先感谢ASPCMS官网注册用户xing0203的辛苦付出!一下为久忆YK网络转载原创作者xing0203的文章内容!为了让小白更加清楚的体验替换过程,久忆YK对原文稍作了修改!
数据库连接: <% set conn=server.createobject(\"adodb.connection\") conn.open \"driver={microsoft access driver (*.mdb)};dbq=\"&server.mappath(\"数据库名\")
第1步:修改plugins下的image/image.js 找到\'<input type=\"button\" class=\"ke-upload-button\" value=\"\' + lang.upload + \'\" />\',
asp函数: <% Const sFileExt=\"jpg|gif|bmp|png\" Function ReplaceRemoteUrl(sHTML,sSaveFilePath,sFileExt)