ABP进阶教程1 - 条件查询
添加实体
打开领域层(即JD.CRS.Core)的Entitys目录 //用以存放实体对象
添加一个枚举StatusCode.cs //状态信息
using System;
using System.Collections.Generic;
using System.Text; namespace JD.CRS.Entitys
{
public enum StatusCode : byte
{
Enabled = ,
Disabled =
}
}
添加数据传输对象
打开应用层(即JD.CRS.Application)的Course\Dto目录 //用以存放Course相关数据传输对象
添加一个Dto GetAllCoursesInput.cs
using Abp.Application.Services.Dto;
using JD.CRS.Entitys; namespace JD.CRS.Course.Dto
{
public class GetAllCoursesInput: PagedResultRequestDto
{
public StatusCode? Status { get; set; }
}
}
更新应用服务
打开应用层(即JD.CRS.Application)的Course\CourseAppService.cs //Course应用服务
重写GetAll方法 //按状态查询Course
public override async Task<PagedResultDto<CourseDto>> GetAll(GetAllCoursesInput input)
{
var query = base.CreateFilteredQuery(input).WhereIf(input.Status.HasValue, t => t.Status == input.Status.Value);
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查询视图模型
新增GetStatusList方法 //获取状态列表
public StatusCode? SelectedStatus { get; set; } public List<SelectListItem> GetStatusList(ILocalizationManager localizationManager)
{
var list = new List<SelectListItem>
{
new SelectListItem
{
Text = localizationManager.GetString(CRSConsts.LocalizationSourceName, "All"),
Value = "",
Selected = SelectedStatus == null
}
}; list.AddRange(Enum.GetValues(typeof(StatusCode))
.Cast<StatusCode>()
.Select(status =>
new SelectListItem
{
Text = localizationManager.GetString(CRSConsts.LocalizationSourceName, $"StatusCode_{status}"),
Value = status.ToString(),
Selected = status == SelectedStatus
})
);
更新控制器
打开展示层(即JD.CRS.Web.Mvc)的Controllers/CourseController.cs //Course控制器
更新Index方法 //按状态查询Course
public async Task<ActionResult> Index(GetAllCoursesInput input)
{
IReadOnlyList<CourseDto> output = (await _courseAppService.GetAll(new GetAllCoursesInput { Status = input.Status })).Items;
var model = new CourseListViewModel(output)
{
SelectedStatus = input.Status
};
return View(model);
}
更新视图
打开展示层(即JD.CRS.Web.Mvc)的Views/Course/Index.cshtml //Course查询视图
插入查询条件 //按状态查询Course
<div class="header">
<table>
<thead>
<tr>
<th class="col-sm-1">@L("Status")</th>
<th class="col-sm-1">
@Html.DropDownListFor(
model => model.SelectedStatus,
Model.GetStatusList(LocalizationManager),
new
{
@class = "form-control",
id = "StatusCombobox"
})
</th>
<th class="col-sm-10"></th>
</tr>
</thead>
</table>
</div>
更新脚本
打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Course查询相关脚本
插入查询条件 //按状态查询Course
var _$statusCombobox = $('#StatusCombobox');
_$statusCombobox.change(function () {
location.href = '/Course?status=' + _$statusCombobox.val();
});
预览效果
ABP进阶教程1 - 条件查询的更多相关文章
- ABP进阶教程2 - 组合查询
点这里进入ABP进阶教程目录 更新数据传输对象 打开应用层(即JD.CRS.Application)的Course\Dto\GetAllCoursesInput.cs //Course数据传输对象(查 ...
- ABP进阶教程0 - 目录
ABP进阶教程 本教程主要讲解如何基于ABP实现条件查询/分页/排序/导出/打印等功能. 源码已分享: GitHub Gitee ABP进阶教程0 - 目录 ABP进阶教程1 - 条件查询 A ...
- ABP进阶教程6 - 布局配置
点这里进入ABP进阶教程目录 解读参数 l - length changing input control (左上,每页显示记录数) f - filtering input (右上,过滤条件) t - ...
- 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 ...
随机推荐
- JS基础语法---对象总结
* 编程思想: * 面向过程:凡事亲力亲为,所有的事情的过程都要清楚,注重的是过程 * 面向对象:提出需求,找到对象,对象解决这个问题,我们要结果,注重的是结果 * ...
- Cesium专栏-空间分析之剖面分析(附源码下载)
Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...
- Flutter学习笔记(6)--Dart流程控制语句
如需转载,请注明出处:Flutter学习笔记(5)--Dart流程控制语句 条件语句:if.if...elseif.if...elseif...else ; ) { print('优秀'); } &g ...
- java8接口
// 可以用来做工具类// 这个注解是函数式注解,表示这个接口里面有且仅有一个抽象方法, 默认方法可以有0个或多个@FunctionalInterfacepublic interface Interf ...
- selenium如何向ueditor富文本中自动输入文本
1.网上给出的方法在百度的富文本控件ueditor中不起作用切换框架失败 2.利用ueditor的api文档,通过js不使用框架切换即可实现轻松写入 eg:ue.setContent('hello')
- Python:程序练习题(二)
Python:程序练习题(二) 2.1温度转换程序. 代码如下: t=input("请输入带符号的温度值(如:32C):") if t[-1] in ["C", ...
- Java内存中的常量池
1,java内存模型简介 <深入理解java虚拟机>里将java内存分为如下五个模块: 堆-堆是所有线程共享的,主要用来存储对象. 其中,堆可分为:新生代和老年代两块区域.使用NewRat ...
- 基于socketserver实现并发的socket编程
目录 一.基于TCP协议 1.1 server类 1.2 request类 1.3 继承关系 1.4 服务端 1.5 客户端 1.6 客户端1 二.基于UDP协议 2.1 服务端 2.2 客户端 2. ...
- PHP 构造函数
在PHP5以前的版本中,构造函数的名称必须与类名相同,这种方法在PHP5中仍然可以使用,但现在已经很少有人用了.PHP5以及之后的版本,构造函数用__construct()方法来声明,这样做的好处是可 ...
- ImportError: unable to find Qt5Core.dll on PATH
一.实验环境 1.Windows7x32_SP1 2.python3.7.4 3.pyinstaller3.5 二.问题描述 1.一直都是在Windows10x64上使用pyinstaller打包ex ...