点这里进入abp进阶教程目录 

添加实体

打开领域层(即jd.crs.core)的entitys目录 //用以存放实体对象
添加一个类statuscode.cs //状态信息

 1 using system;
 2 using system.collections.generic;
 3 using system.text;
 4 
 5 namespace jd.crs.entitys
 6 {
 7     public enum statuscode : byte
 8     {
 9         enabled = 0,
10         disabled = 1
11     }
12 }

添加数据传输对象 

打开应用层(即jd.crs.application)的course\dto目录 //用以存放course相关数据传输对象

添加一个dto getallcoursesinput.cs

 1 using abp.application.services.dto;
 2 using jd.crs.entitys;
 3 
 4 namespace jd.crs.course.dto
 5 {
 6     public class getallcoursesinput: pagedresultrequestdto 
 7     {
 8         public statuscode? status { get; set; }
 9     }
10 }

更新应用服务

打开应用层(即jd.crs.application)的course\courseappservice.cs //course应用服务

重写getall方法 //按状态查询course

 1 public override async task<pagedresultdto<coursedto>> getall(getallcoursesinput input)
 2 {
 3     var query = base.createfilteredquery(input).whereif(input.status.hasvalue, t => t.status == input.status.value);    
 4     var coursecount = query.count();
 5     var courselist = query.tolist();
 6     return new pagedresultdto<coursedto>()
 7     {
 8         totalcount = coursecount,
 9         items = objectmapper.map<list<coursedto>>(courselist)
10     };
11 }

更新模型

打开展示层(即jd.crs.web.mvc)的models/course/courselistviewmodel.cs //course查询视图模型

新增getstatuslist方法 //获取状态列表

 1 public statuscode? selectedstatus { get; set; }
 2 
 3 public list<selectlistitem> getstatuslist(ilocalizationmanager localizationmanager)
 4 {
 5     var list = new list<selectlistitem>
 6     {
 7         new selectlistitem
 8         {
 9             text = localizationmanager.getstring(crsconsts.localizationsourcename, "all"),
10             value = "",
11             selected = selectedstatus == null
12         }
13     };
14 
15     list.addrange(enum.getvalues(typeof(statuscode))
16         .cast<statuscode>()
17         .select(status =>
18             new selectlistitem
19             {
20                 text = localizationmanager.getstring(crsconsts.localizationsourcename, $"statuscode_{status}"),
21                 value = status.tostring(),
22                 selected = status == selectedstatus
23             })
24     );

更新控制器

打开展示层(即jd.crs.web.mvc)的controllers/coursecontroller.cs //course控制器

更新index方法 //按状态查询course

1 public async task<actionresult> index(getallcoursesinput input)
2 {
3     ireadonlylist<coursedto> output = (await _courseappservice.getall(new getallcoursesinput { status = input.status })).items;
4     var model = new courselistviewmodel(output)
5     {
6         selectedstatus = input.status
7     };
8     return view(model);
9 }

更新视图

打开展示层(即jd.crs.web.mvc)的views/course/index.cshtml //course查询视图

插入查询条件 //按状态查询course

 1 <div class="header">
 2     <table>
 3         <thead>
 4             <tr>
 5                 <th class="col-sm-1">@l("status")</th>
 6                 <th class="col-sm-1">
 7                     @html.dropdownlistfor(
 8                     model => model.selectedstatus,
 9                     model.getstatuslist(localizationmanager),
10                     new
11                     {
12                         @class = "form-control",
13                         id = "statuscombobox"
14                     })
15                 </th>
16                 <th class="col-sm-10"></th>
17             </tr>
18         </thead>
19     </table>
20 </div>

更新脚本

打开展示层(即jd.crs.web.mvc)的\wwwroot\view-resources\views\course\index.js //用以存放course查询相关脚本

插入查询条件 //按状态查询course

1 var _$statuscombobox = $('#statuscombobox');
2 _$statuscombobox.change(function () {
3     location.href = '/course?status=' + _$statuscombobox.val();
4 });

预览效果