MVC之查询

开发工具与关键技术:Visual Studio、MVC
作者:幻奏
撰写时间:2019.04.13

我之前已经写过新增了,那么现在我来写一下查询。查询很多地方都会用到吧,比如我们要让数据在表格显示出来就要用查询来让表格数据初始化,还有绑定下拉框查询什么的。。。好了,话不多说了就进入今天的讲解吧。
讲查询之前有一个东西要讲一下的,那就是如何进行表格初始化的。在这过程中我们要用到一个《layui》,这个jQuery插件很好用。我们先把它引到视图里,再声明两个变量。

var tabTitles;
var layer, layuiTable;

最后看下它的数据表格的使用方法,复制过来然后初始化layui。如下:

//加载&初始化layui模块layui.use(['layer', 'table'], function () {layer = layui.layer;layuiTable = layui.table;tabTitles = layuiTable.render({elem: '#tabTitles',//url: 'selectStaffInfor',cols: [[{ type: 'checkbox' },{ type: 'numbers', title: '序号' },{ field: 'EmployeeID', title: 'EmployeeID', hide: true },{ field: 'EmployeeNumber', title: '编号', align: 'center' },{ field: 'EmployeeName', title: '姓名', align: 'center' },{ field: 'Phone', title: '电话', align: 'center' },{ field: 'Cellphone', title: '手机', align: 'center' },{ field: 'DeoartmentName', title: '部门', align: 'center' },{ field: 'PositionName', title: '职位', align: 'center' },{ field: 'Address', title: '地址', align: 'center' },{ field: 'Remark', title: '备注', align: 'center' },]],page: {limit: 10,//每页显示的条数limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项},data: []});//监听表格行单击事件layuiTable.on('row(tabTitles)', function (obj) {//console.log(obj);//标注选中行样式obj.tr.addClass("layui-table-click").siblings().removeClass("layui-table-click");//选中行,勾选复选框obj.tr.find("div.layui-unselect.layui-form-checkbox")[0].click();});searchYuago();//多条件查询的方法});

初始化layui模块,大概就是复制过来用就是了,不过我们还要把查询按钮的方法放里面,要不然表格出不来。我们还要一个监听表格行的单击事件,也是layui里的方法。如上
我们如果用了模态框,那么在查询之前是不是要清空一下输入框里面的数据,要不然可能有残留的数据,给人不好的体验。我们要获取输入框的ID然后赋值空就OK了。我们还要绑定一个方法到下拉框,我会在最后给你们看下。

//弹出组合的查询模态框function opSearchModal() {//清空姓名信息$("#nameNumberType").val("");//绑定部门下拉框createSelect("Department", "/Page/selectDepartment");//绑定职位下拉框createSelect("Position", "/Page/selectPosition");//弹出模态框$("#modalCombox").modal("show");}

到查询的按钮了,当我们点击时要获取所有的查询条件,然后判断数据是否为空或者undefined,因为下拉框的ID如果为空的话,浏览器会报错。所以我们要判断并让它等于0,但输入框的字符串可以为空,只要判断它不为undefined就行了。数据不为空就进行数据表格的重载,这个重载也是那个插件的方法。

//组合查询function searchYuago() {//获取所有的查询条件//部门var departmentId = $("#Department").val();//职位var positionId = $("#Position").val();//姓名var employeeNumber = $("#nameNumberType").val();if (departmentId == "" || departmentId == undefined) {departmentId = 0;}if (positionId == "" || positionId == undefined) {positionId = 0;}if (employeeNumber == undefined) {employeeNumber = "";}//表格数据重载tabTitles.reload({url: '/Page/selectStaffInfor',where: {DepartmentID: departmentId,PositionID: positionId,EmployeeNumber: employeeNumber},page: {curr: 1}});//关闭组合查询的模态框$("#modalCombox").modal("hide");}

注意:视图写的ID要和传到控制器的ID一样。在写之前我们要创建两个实体类,一个是LayuiTableData类的封装,用于返回layuiTable数据。

public class LayuiTableData<T>{/// <summary>/// 数据状态码 -- 可以不设置/// </summary>public int code { get; set; }/// <summary>/// 状态信息 -- 可以不设置/// </summary>public string msg { get; set; }/// <summary>/// 总行数--必须/// </summary>public int count { get; set; }/// <summary>/// 数据--必须/// </summary>public List<T> data { get; set; }}

还有一个是LayuiTablePage类的封装,这样就不用每次都请求分页的数据了。

/// <summary>/// layui table组件分页请求数据封装/// </summary>public class LayuiTablePage{/// <summary>/// page 代表当前页码/// </summary>public int page { get; set; }/// <summary>/// limit 代表每页数据量/// </summary>public int limit { get; set; }//方法/// <summary>/// 分页开始序号/// </summary>/// <returns></returns>public int GetStartIndex(){return (page - 1) * limit;}/// <summary>/// 分页结束序号/// </summary>/// <returns></returns>public int GetEndIndex(){return page * limit - 1;}}

实体类的命名第一个字母最好都大写。
在控制器那里我们要先接收页面传过来的参数。
在这里插入图片描述
然后用linq查询出你要的所有数据,注意:这里一定要用orderby排序,要不然后面分页查询时会不行。

List<EmployeeVo> listEmployee = (from tbEmployee in myModels.PW_Employeejoin tbDeoartmentName in myModels.SYS_Department on tbEmployee.DepartmentID equals tbDeoartmentName.DepartmentIDjoin tbPositionName in myModels.SYS_Position on tbEmployee.PositionID equals tbPositionName.PositionIDorderby tbEmployee.EmployeeIDselect new EmployeeVo{EmployeeID = tbEmployee.EmployeeID,//员工IDEmployeeNumber = tbEmployee.EmployeeNumber,//员工编号EmployeeName = tbEmployee.EmployeeName,//员工姓名Cellphone = tbEmployee.Cellphone,//手机号码Phone = tbEmployee.Phone,//电话Remark = tbEmployee.Remark,//备注Address = tbEmployee.Address,//地址DeoartmentName = tbDeoartmentName.DeoartmentName,//部门PositionName = tbPositionName.PositionName,//职位DepartmentID = tbEmployee.DepartmentID,PositionID = tbEmployee.PositionID}).ToList();

查询出数据后我们就要对视图传过来的参数进行判断,不能为空或null,然后再对数据进行条件筛选,把我们要查询的数据用lamb表达式查出。如下:

//条件筛选if (DepartmentID > 0){listEmployee = listEmployee.Where(m => m.DepartmentID == DepartmentID).ToList();}if (PositionID > 0){listEmployee = listEmployee.Where(m => m.PositionID == PositionID).ToList();}if (!string.IsNullOrEmpty(EmployeeNumber)){listEmployee = listEmployee.Where(m => m.EmployeeName.Contains(EmployeeNumber) || m.EmployeeNumber.Contains(EmployeeNumber)).ToList();}

然后,我们要计算数据的总条数。

//计算数据总条数int totalRow = listEmployee.Count();

再进行分页查询

//分页查询List<EmployeeVo> dbEmployee = listEmployee.Skip(layuiTablePage.GetStartIndex())//分页开始的序号.Take(layuiTablePage.limit)//limit每页显示的条数.ToList();

最后实例化一下数据,并return 返回数据到页面。

//实例化LayuiTableData<EmployeeVo> layuiTableData = new LayuiTableData<EmployeeVo>{   //赋值count = totalRow,//总行数data = dbEmployee//数据};return Json(layuiTableData, JsonRequestBehavior.AllowGet);

下面是绑定下拉框的方法,我就不说了,你们自己看一下吧。

/// <summary>/// 查询部门/// </summary>/// <returns></returns>public ActionResult selectDepartment(){List<SelectVo> listDepartment = (from tbDepartment in myModels.SYS_Departmentselect new SelectVo{id = tbDepartment.DepartmentID,text = tbDepartment.DeoartmentName}).ToList();//拼接选择项listDepartment = Common.Tools.SetSelectJson(listDepartment);return Json(listDepartment, JsonRequestBehavior.AllowGet);}

查询就到这里结束了,你们学会了没(o゜▽゜)o☆

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

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

相关文章

java反射的工具类的函数集合

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type;/*** 反射的 Utils 函数集合* 提…

Spring Boot Server容器配置

转载自 Spring Boot Server容器配置参数配置容器 server.xx开头的是所有servlet容器通用的配置&#xff0c;server.tomcat.xx开头的是tomcat特有的参数&#xff0c;其它类似。 所有参数绑定配置类&#xff1a;org.springframework.boot.autoconfigure.web.ServerProperties 代码…

MVC之删除

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.04.17在页面的数据表格中&#xff0c;既然有新增&#xff0c;那一定也有删除吧。那MVC是怎么写删除的呢&#xff0c;就让我来讲一下吧。 删除一般有删除单条数据和删除多条数…

转】Eclipse编辑Spring配置文件xml时自动提示类class包名

转自 http://bigdragon.iteye.com/blog/2396081 第一步&#xff0c;先查看下自己的Eclipse是什么版本&#xff0c;步骤如下&#xff1a; 1.1 点击Eclipse菜单‘Help -> About Eclipse’&#xff0c;如下图&#xff1a; 1.2 点击Eclipse图标如下&#xff0c;看清楚哦&…

Spring Boot读取配置的几种方式

转载自 Spring Boot读取配置的几种方式读取application文件 在application.yml或者properties文件中添加&#xff1a; info.addressUSA info.companySpring info.degreehighValue注解读取方式import org.springframework.beans.factory.annotation.Value; import org.springfra…

MVC之修改

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.04.24ASP.NET MCV的增删查改在我前面的讲解中&#xff0c;我已经把前三个都说了一下&#xff0c;现在就只剩下修改没讲了。所以&#xff0c;我今天就给你们讲一下&#xff0c…

VMnet1和VMnet8 未识别的网络的解决方法

转自&#xff1a; https://blog.csdn.net/jackphang/article/details/8939738 我的系统是win7 64位&#xff0c;它居然不能识别VMnet1和VMnet8&#xff0c;在网上找了些资料&#xff0c;发现所有资料都是一样的。不过事实证明是正确的。 解决办法&#xff1a; 1&#xff0c;在…

jps命令:查看Java进程等详细信息

转载自 jps命令&#xff1a;查看Java进程等详细信息jps是java自带的查看java进程的命令&#xff0c;通过这个命令可以查看当前系统所有运行中的java进程、java包名、jar包名及JVM参数等。jps -help 可以查看命令用法。-q: 只显示VM 标示&#xff0c;不显示jar,class, main参数等…

MVC如何添加Model

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.04.27初步学习MVC编程模式的时候&#xff0c;我基本清楚了如何创建MVC&#xff0c;而添加model&#xff08;模型&#xff09;似乎还不够理解&#xff0c;通过学习我大概了解了…

在win10系统中安装Visual C++ 6.0的具体方法

转自&#xff1a; https://blog.csdn.net/qq_39235641/article/details/79102694 很多学C语言的同学很熟悉VC6.0&#xff0c;但是在win10系统下&#xff0c;VC6.0便无法打开&#xff0c;报错&#xff1a;0x0000142。这是因为汉化版本和最新的win10系统兼容性不好导致的。win10…

如何设计一个安全的登录流程

转载自 如何设计一个安全的登录流程登录是系统中最重要的一个功能之一&#xff0c;登录成功就能拥有系统的使用权利&#xff0c;所以设计一个安全的登录流程是十分必要的&#xff0c;那在一般登录中需要考虑哪些重要因素呢&#xff1f;我们一一列表一下。使用https协议进行传输…

如何导入数据模板到MVC

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.5.3在平常的生活中&#xff0c;我们可能需要添加大量的数据&#xff0c;这时一条一条地新增肯定不能满足我们的要求了&#xff0c;所以我们就需要批量导入数据了。现在我就来…

在左表或右表的连接字段上建立索引对左、内连接的查询效率的优化情况分析

-- 1、建表 drop table if exists dept_tbl;create table dept_tbl (rcrd_id int unsigned primary key auto_increment comment 记录编号, dept_id int unsigned not null comment 部门编号) engine innodb default charsetutf8 comment 部门表;drop table if exists emp_tb…

并发控制--悲观锁和乐观锁详解

转载自 并发控制--悲观锁和乐观锁详解背景考虑下面两个并发带来的问题&#xff1a;1、丢失更新&#xff1a;一个事务的更新结果覆盖了其它事务的更新结果&#xff0c;即所谓的更新丢失。2、脏读&#xff1a;当一个事务读取其它完成一半事务的记录时&#xff0c;就会发生脏读取。…

如何导出数据到Excel表格

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.5.5我们在日常的生活中常常会看到很多的数据&#xff0c;有时&#xff0c;我们不一定只是在项目里面看到数据&#xff0c;可能我们还要在其他的地方使用&#xff0c;这时我们…

mysql批量插入数据的函数和存储过程

-- 创建函数前&#xff0c;设置 set global log_bin_trust_function_creatorsTRUE; -- 新建函数-产生随机的字符串 drop function if exists rand_str; delimiter ## create function rand_str(n int) returns varchar(255) begin declare chars_str varchar(100) default abc…

打印水晶报表

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.5.8我们在日常生活中常常会打印很多东西&#xff0c;所以我打算讲一下是怎么打印水晶报表的。 打印水晶报表其实和导出差不多&#xff0c;只是有一点不同。打印也用到了多条件…

Java提升篇-事务隔离级别和传播机制

转载自 Java提升篇&#xff0d;事务隔离级别和传播机制问题的提出为了保证并发操作数据的正确性及一致性&#xff0c;SQL规范于1992年提出了数据库事务隔离级别。事务隔离级别分类事务隔离级别由低往高可分为以下几类READ UNCOMMITTED&#xff0c;读取未提交的数据。这是最不安…

多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)

【0】README&#xff1a; 不论是加读锁还是写锁&#xff0c;必须要等到其他数据库连接关闭后才可以进行&#xff1b; 【1】添加表级读锁 1.1&#xff09;多会话执行的时序操作分析&#xff1a; 1.2&#xff09;session1执行的具体时序操作&#xff1b; mysql> select * …

如何写登录验证

如何写登录验证 开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.12我们都知道很多网站都会有登录的界面&#xff0c;目的就是要验证你的账号是否正确&#xff0c;不正确就不能登录&#xff0c;这样就能防止有其他目的的…