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 () {//当前页减1var currPage = $("input[name='currPage']").val();if (currPage > 1) {currPage = currPage-1;}$("input[name='currPage']").val(currPage);$("#mainForm").submit();});

下一页:

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

 //下一页$("#turn_next").click(function () {//当前页减1var 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);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ2406-Power Strings【KMP】

正题 链接&#xff1a; http://poj.org/problem?id2406 大意 一个字符串&#xff0c;求最小循环节。 解题思路 用KMP求循环节。 因为如果有循环节那么一定是l-next[l]。只需要判断一下l-next[l]是否可以被l整除就好了 代码 #include<cstdio> #include<cstring&…

.NET Standard@Xamarin.Forms

编者语 &#xff1a; .NET技术社群由于微软的开源和跨平台性越来越受关注&#xff0c;但国内都是碍于大家以往的认识阻碍了发展&#xff0c;没有太多大的企业敢于去把.NET作为第一生产力。你作为.NET程序员有义务去保护好你的饭碗&#xff0c;也要改变人对.NET的认知。希望大家…

JavaFX图表(一)

翻译自 JavaFX - 图表 通常&#xff0c;图表是数据的图形表示。有各种各样的图表来表示数据&#xff0c;如条形图&#xff0c;饼图&#xff0c;折线图&#xff0c;散点图等。 JavaFX支持各种饼图和XY图表。在XY平面上表示的图表包括AreaChart&#xff0c;BarChart&#xff0…

我们在进行着一场拔河比赛……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。不知不觉&#xff0c;3班已经面临就业了。似乎每个班级到三期的最后阶段&#xff0c;出现的问题都那么类似&#xff0c;那就是一部分同学已经“放弃努力”了&#xff0c;大家貌似在等着最后的就业&…

JavaFX图表(三)之折线图

翻译自 JavaFX - 折线图 折线图或折线图将信息显示为由直线段连接的一系列数据点&#xff08;标记&#xff09;。折线图显示数据如何以相等的时间频率变化。 以下是描绘不同年份学校数量的折线图。 在JavaFX中&#xff0c;折线图由名为LineChart的类表示。该类属于包javafx…

Redis(案例一:注册登录-图形验证码+谷歌开源Kaptcha)

文章目录背景Kaptcha 框架介绍添加Kaptcha依赖Kaptcha配置CommonUtil⼯具类接⼝开发JsonData响应⼯具类封装校验逻辑背景 注册-登录-修改密码⼀般需要发送验证码&#xff0c;但是容易被攻击恶意调⽤ 什么是短信-邮箱轰炸机 ⼿机短信轰炸机是批、循环给⼿机⽆限发送各种⽹站的注…

释放.NET Big Memory和内存映射文件的能量

要点&#xff1a; 通常Web服务器具有的内存远远超过了.NET GC在正常情况下可以有效处理的量。缓存服务器的性能优势通常会因增加了网络成本而下降。内存映射文件通常是在系统重新启动后填充缓存的最快方式。服务器端调优的目的是出站网络连接达到饱和的程度。 通过最小化CPU、…

3班的第二次模拟面试

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。今天&#xff0c;三班进行了第二次模拟面试&#xff0c;还是和第一次一样&#xff0c;分为技术面试和人事面试&#xff0c;不过这次不一样的一点就是我亲自面的大部分开发学生。通过这次模拟面试&#…

P1082-扩欧模板同余方程【扩欧,数论】

正题 链接&#xff1a; https://www.luogu.org/record/show?rid7914999 大意 就是 ax≡1(modb)ax≡1(modb)给出a和b求x解题思路 扩欧模板不解释 代码 #include<cstdio> using namespace std; int x,y,a,b,k; void gcd(int a,int b) {if (b0){x1;y0;return;}gcd(b,…

JavaFX图表(四)之面积图

翻译自 JavaFX - 面积图 面积图用于绘制基于区域的图表。它绘制给定系列点与轴之间的区域。通常&#xff0c;此图表用于比较两个数量。 以下是一张区域图表&#xff0c;描绘了一个星期内两个人消耗的水果数量。 在JavaFX中&#xff0c;Area图表由名为AreaChart的类表示。该类…

深入聊聊微服务架构的身份认证问题

从单体应用架构到分布式应用架构再到微服务架构&#xff0c;应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化&#xff0c;身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用&#xff0c;如何保证高效安全的身份认证&#xff1f;面对外…

获取请求IP地址

import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException;public class IpAddrUtil {/*** 获取ip* param request* return*/public static String getIpAddr(HttpServletRequest request) {String ipAddress null;…

今晚在学校值班……

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注公众号【雄雄的小课堂】。今晚在学校值班。每次进班巡查的时候&#xff0c;不管是哪个班级&#xff0c;同学们个个都是精神抖擞&#xff0c;双眼紧盯屏幕&#xff0c;双手放在键盘上&#xff0c;看起来貌似正在打代码或思考似的…

JavaFX图表(五)之气泡图

翻译自 JavaFX - 气泡图 气泡图用于种植三维数据; 第三个维度将由气泡的大小&#xff08;半径&#xff09;表示。 以下是描绘完成工作的气泡图。 在JavaFX中&#xff0c;气泡图由名为BubbleChart的类表示。该类属于包javafx.scene.chart。通过实例化此类&#xff0c;您可以…

P3957-跳房子【单调队列,dp,二分】

前言 链接&#xff1a; https://www.luogu.org/record/show?rid7915892 这就是之前普及组的第四题… 大意 有n个格子&#xff0c;每个格子有价值。机器人有固定的跳跃距离d&#xff0c;用k个金币改进的话&#xff0c;就可以让跳跃距离在d-k到dk之间&#xff0c;不过至少要…

IdentityServer4 实现自定义 GrantType 授权模式

OAuth 2.0 默认四种授权模式&#xff08;GrantType&#xff09;&#xff1a; 授权码模式&#xff08;authorization_code&#xff09;简化模式&#xff08;implicit&#xff09;密码模式&#xff08;password&#xff09;客户端模式&#xff08;client_credentials&#xff09…

分享几个上机案例题

1.从控制台中输入一个数&#xff0c;如果是1&#xff0c;输出壹&#xff1b;如果是2&#xff0c;输出贰&#xff0c;如果是三&#xff0c;输出叁&#xff0c;否则输出没有static void Main(string [] args) {Console.WriteLine("请输入一个数");int aint.Parse(Conso…

POJ2115-C Looooops【扩欧,同余】

正题 链接&#xff1a; http://poj.org/problem?id2115 大意 就是给出个循环 for(iA;i!B;i(iC)mod2k)for(iA;i!B;i(iC)mod2k)求需要循环次数 解题思路 我们定义l2kl2k首先可以推出&#xff1a; CxA≡B(modl)CxA≡B(modl)然后解mod CxABlkCxABlk然后定义y−ly−l&#xff0…

Java自动化邮件中发送图表(四)之javafx Chart

一、Javafx Chart JavaFX支持各种饼图和XY图表。在XY平面上表示的图表包括AreaChart&#xff0c;BarChart&#xff0c;BubbleChart&#xff0c;LineChart&#xff0c;ScatterChart&#xff0c;StackedAreaChart&#xff0c;StackedBarChart等。 注意&#xff1a;在Server JRE…

JsonData响应工具类封装

public class JsonData {/*** 状态码 0 表示成功*/private Integer code;/*** 数据*/private Object data;/*** 描述*/private String msg;public JsonData(int code,Object data,String msg){this.code code;this.msg msg;this.data data;}/*** 成功&#xff0c;不传入数据…