ABP进阶教程2 - 组合查询
更新数据传输对象
打开应用层(即JD.CRS.Application)的Course\Dto\GetAllCoursesInput.cs //Course数据传输对象(查询条件)
增加一行代码
public string Keyword { get; set; } //用于全文搜索
using Abp.Application.Services.Dto;
using JD.CRS.Entitys; namespace JD.CRS.Course.Dto
{
public class GetAllCoursesInput: PagedResultRequestDto
{
public StatusCode? Status { get; set; }
public string Keyword { get; set; }
}
}
更新应用服务
打开应用层(即JD.CRS.Application)的Course\CourseAppService.cs //Course应用服务
更新GetAll方法 //按Keyword查询Course
.WhereIf(
!input.Keyword.IsNullOrEmpty(), t =>
t.Code.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按编号查询
|| t.DepartmentCode.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按院系编号查询
|| t.Name.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按名称查询
|| t.Credits.ToString().Contains((input.Keyword ?? string.Empty).ToLower()) //按学分查询
|| t.Remarks.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按备注查询
);
完整代码如下:
public override async Task<PagedResultDto<CourseDto>> GetAll(GetAllCoursesInput input)
{
var query = base.CreateFilteredQuery(input)
.WhereIf(input.Status.HasValue, t => t.Status == input.Status.Value)
.WhereIf(
!input.Keyword.IsNullOrEmpty(), t =>
t.Code.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按编号查询
|| t.DepartmentCode.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按院系编号查询
|| t.Name.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按名称查询
|| t.Credits.ToString().Contains((input.Keyword ?? string.Empty).ToLower()) //按学分查询
|| t.Remarks.ToLower().Contains((input.Keyword ?? string.Empty).ToLower()) //按备注查询
);
var coursecount = query.Count();
var courselist = query.ToList();
return new PagedResultDto<CourseDto>()
{
TotalCount = coursecount,
Items = ObjectMapper.Map<List<CourseDto>>(courselist)
};
}
更新模型
打开展示层(即JD.CRS.Web.Mvc)的Models/Course/CourseListViewModel.cs //Course查询视图模型
增加一行代码
public string Keyword { get; set; }
更新控制器
打开展示层(即JD.CRS.Web.Mvc)的Controllers/CourseController.cs //Course控制器
更新Index方法 //按Keyword查询Course
增加一行代码
Keyword = input.Keyword
完整代码如下:
public async Task<ActionResult> Index(GetAllCoursesInput input)
{
IReadOnlyList<CourseDto> output = (await _courseAppService.GetAll(new GetAllCoursesInput { Status = input.Status, Keyword = input.Keyword })).Items;
var model = new CourseListViewModel(output)
{
Status = input.Status,
Keyword = input.Keyword
};
return View(model);
}
更新视图
打开展示层(即JD.CRS.Web.Mvc)的Views/Course/Index.cshtml //Course查询视图
插入查询条件 //按Keyword查询Course
<div class="header">
<table>
<thead>
<tr>
<th class="col-sm-1">@L("Status")</th>
<th class="col-sm-1">
@Html.DropDownListFor(
model => model.Status,
Model.GetStatusList(LocalizationManager),
new
{
@class = "form-control",
id = "Status"
})
</th>
<th class="col-sm-1">@L("Keyword")</th>
<th class="col-sm-4">
<input id="Keyword" name="Keyword" type="text" class="form-control" placeholder="Please enter the keyword..." value=@Model.Keyword />
</th>
<th class="col-sm-4"></th>
<th class="col-sm-1">
<button id="Search" class="form-control">@L("Search")</button>
</th>
</tr>
</thead>
</table>
</div>
更新脚本
打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Course查询相关脚本
插入查询条件 //按Stauts & Keyword 组合查询Course
//define variable
var _$status = $('#Status');
var _$keyword = $('#Keyword');
var _$search = $('#Search');
//Search
_$search.click(function () {
location.href = '/Course?status=' + _$status.val() + '&keyword=' + _$keyword.val();
});
预览效果
ABP进阶教程2 - 组合查询的更多相关文章
- ABP进阶教程1 - 条件查询
点这里进入ABP进阶教程目录 添加实体 打开领域层(即JD.CRS.Core)的Entitys目录 //用以存放实体对象添加一个枚举StatusCode.cs //状态信息 using System; ...
- ABP进阶教程0 - 目录
ABP进阶教程 本教程主要讲解如何基于ABP实现条件查询/分页/排序/导出/打印等功能. 源码已分享: GitHub Gitee ABP进阶教程0 - 目录 ABP进阶教程1 - 条件查询 A ...
- ABP进阶教程11 - 小结
点这里进入ABP进阶教程目录 效果预览 至此,ABP进阶教程的查询/分页/排序/导出/打印示例已完成,效果如下 登录 首页 办公室信息 院系信息 课程信息 教职员信息 学生信息 新增 修改 删除 查询 ...
- ABP进阶教程10 - PDF导出中文乱码
点这里进入ABP进阶教程目录 问题描述 功能按钮 - 导出PDF,中文信息导出为乱码. 解决方案 导出PDF是通过pdfmake.js实现的. 检查发现是pdfmake引用的vfs_fonts.js字 ...
- ABP进阶教程9 - CSV导出中文乱码
点这里进入ABP进阶教程目录 问题描述 功能按钮 - 导出CSV,中文信息导出为乱码. 解决方案 打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\View ...
- ABP进阶教程3 - 优化编辑
点这里进入ABP进阶教程目录 我们尝试在新增/编辑界面增加一个下拉框用来代替输入框编辑Status 添加实体 打开领域层(即JD.CRS.Core)的Entitys目录 //用以存放实体对象添加一个类 ...
- ABP进阶教程8 - 自定义按钮
点这里进入ABP进阶教程目录 在功能按钮区增加一个自定义按钮 - Add(创建课程) 添加按钮 打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views ...
- ABP进阶教程7 - 功能按钮
点这里进入ABP进阶教程目录 下载插件 打开Datatables官网(https://datatables.net/download/) 勾选Extensions/Buttons,下载插件,复制到JD ...
- ABP进阶教程6 - 布局配置
点这里进入ABP进阶教程目录 解读参数 l - length changing input control (左上,每页显示记录数) f - filtering input (右上,过滤条件) t - ...
随机推荐
- hive查询语句入门(hive DDL)
hive DDL 启动hadoop /apps/hadoop/sbin/start-all.sh 开启MySQL库,用于存放hive的元数据 sudo service mysql start 启动hi ...
- PostgreSQL update set from 两表联合更新,注意与其它数据库更新语法有差别
最近用PostgreSql数据库进行表关联更新时,发现与之前用的Sql Server 和My Sql语法有很大差别,稍微不注意,很容易出错. PostgreSql表更新时,两个表只允许一个表起别名,一 ...
- OpenCV:图像的普通二值化
首先我们来看看图像二值化的过程,opencv一共有好几种不同的二值化算法可以使用,一般来说图像的像素,亮度等条件如果超过了某个或者低于了某个阈值,就会恒等于某个值,可以用于某些物体轮廓的监测: 导包: ...
- mysql数据库相关流程图/原理图
mysql数据库相关流程图/原理图 1.mysql主从复制原理图 mysql主从复制原理是大厂后端的高频面试题,了解mysql主从复制原理非常有必要. 主从复制原理,简言之,就三步曲,如下: 主数据库 ...
- c程序内存检测工具 - Valgrind
常用C程序内存泄露检测工具 https://blog.csdn.net/u012662731/article/details/78652651
- jmeter测试并发
由于生产出现个并发问题,本地没法重现.后来网上有人说使用jmeter可以测试并发,也有人说postman可以测试.但本着试试新鲜的东西,就用jmeter. 到apache上面下载. 下载加压,然后运行 ...
- EF中嵌套类的where查询
有一个订单类:Order,在订单Order类中有一个子类,订单详细类OrderDetail. 需求:根据订单详细类的字段过滤数据 public class Order { public string ...
- MySQL之架构简单分析
上图为MySQL的简易架构图,给您有一个大概的概念,下面我将为您进行进一步的分析. 连接器: 当连接MySQL数据库时,等待的将是MySQL服务端的连接器:连接器的职责是和客户端建立连接.获取权限.维 ...
- Mac打开Finder快捷键
摘要:目前网络中较常见的打开Finder的方法有两种,要么是先进入桌面状态,再使用快捷键command + shift + c:要么是通过下载软件来设置打开Finder的快捷键.都过于繁琐,其实有很简 ...
- Modbus 协议
转载:https://www.cnblogs.com/DreamRecorder/p/9081127.html 一.Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言 ...