zoukankan      html  css  js  c++  java
  • 多条件模糊查询和回收站还原的实现

    ASP.NET MVC+EF框架+EasyUI实现权限管理系列
    (1)框架搭建 (2)数据库访问层的设计Demo (3)面向接口编程 (4)业务逻辑层的封装
    (5)前台JQuery easyUI实现 (6)EF上下文实例管理 (7)DBSession的封装 (8)DBSession线程内唯一 (9)TT模板的学习 (10)VSS源代码管理 (11)验证码实现和底层修改 (12)实现用户异步登录和T4模板 (13)权限设计 (14)主框架搭建 (15)权限数据库模型和用户登录详细错误 (16)用户注册的各种验证 (17)注册用户功能的细节处理 (18)过滤器的使用和批量删除数据(伪删除和直接删除)(19)用户信息的修改和浏览

    1、对用户进行多条件模糊查询

    (1)多条件模糊查询就是我在要求输入的文本框或者DropDownList中输入/选择某些信息,然后当我单击搜索的时候我们能够直接搜到我们需要的数据,这个就是多条件模糊查询。
    (2)首先我们就要绑定一个jQuery方法来实现点击搜索按钮的实现,然后将得到的值发送到前台去查询数据,那么怎么样才能够将文本框中的值传递到后台去呢?在我们前面做的时候EasyUI帮我们传递过去了page,row参数,那么我们就想EasyUI提供了什么参数没有,我们可以直接给参数赋值传递到后台去,这个当然了,EasyUI提供的参数就是queryParams,至于这个参数怎么使用大家可以去查一下,这样的话JQuery发送异步请求的方法代码如下:
    //绑定搜索按钮的点击事件
    function BindSearchClickEvent(){
    //按条件进行查询数据,首先我们得到数据的值
    $("#btnSearch").click(function(){
    //得到用户输入的参数
    var queryData={
    RealName:$("txtRealName").val(),
    Telephone:$("txtTelephone").val(),
    SearchMail:$("txtSearchMail").val(),
    Enabled:$("txtEnabled").combobox('getValue'),
    AuditStatus:$("#txtAuditStatus").combobox('getValue')
    }

    //将值传递给
    initTable(queryData);
    return false;
    });
    }
    (3)然后我们在EasyUI的initTable中传入参数queryData,然后再给参数queryParams赋给我们的前台参数queryData,这样我们前台发送异步请求的部分就结束了
    (4)那么接下来我们就要去对控制器中得到前台JSON对象的方法进行修改,这时候我们修改的时候因为传递了很多参数,所以我们最好在业务逻辑层在写一个实现多条件查询的方法,那么我首先实现了下面的代码:
    IQueryable<BaseUser> LoadSearchData(string Name,string TelPhone,string Email);
    (5)那么这时候大部分人只要看一眼这个方法都会想到要是参数是可以变化的呢?我要在多传递两个参数呢?难道你就在这里加吗?我们可以用下面 的方法来实现对参数变化的情况
    (6)首先我们在通用类Comon中添加一个公用基类ParamterQuery,然后我们定义几个常用的属性,代码如下:
    namespace LYZJ.UserLimitMVC.Common
    {
    ///定义参数的公用类
    public class ParamterQuery
    {
    public int PageIndex{get;set;}
    public int PageSize{get;set;}
    public int Total{get;set;}
    }
    }
    (7)接下来我们在Model层再添加一个类UserInfoQuery,这个类继承自ParamterQuery,并且在此基础上又新添加了一些自己特有的属性,代码如下:
    namespace LYZJ.UserLimitMVC.Model
    {
    ///对多条件查询的其他参数的录入
    public class UserInfoQuery:ParameterQuery
    {
    public string RealName{get;set;}
    public string Telephone{get;set;}
    public string EMail {get;set;}
    public string Enabled{get;set;}
    public string AuditStatus{get;set;}
    }
    }
    (8)这样我们就完成了对参数的操作,这时候如果我么想要添加一个查询条件我们直接到Model层加一个属性即可,我们在业务逻辑层是如何实现的
    ///实现对多条件查询的判断方法的封装
    ///引用传递,传递参数的信息
    public IQueryable<BaseUser> LoadSearchData(UserInfoQuery query)
    {
    var temp=_DbSession.BaseUserRepository.LoadEntities(u=>true);
    //首先过滤姓名
    if(!string.IsNullOrEmpty(query.RealName))
    {
    temp=temp.Where<BaseUser>(u=>u.RealName.Contains(query.RealName));
    }
    if(!string.IsNullOrEmpty(query.Telephone))
    {
    temp=temp.Where<BaseUser>(u=>u.Telephone.Contains(query.Telephone));
    }
    if(!string.IsNullOrEmpty(query.EMail))
    {
    temp=temp.Where<BaseUser>(u=>u.Email.Contains(query.EMail));
    }
    if(query.Enabled !=-1)
    {
    temp=temp.Where<BaseUser>(u=>u.Enabled==query.Enabled);
    }
    if(!string.IsNullOrEmpty(query.AuditStatus)&&query.AuditStatus !="-1")
    {
    temp=temp.Where<BaseUser>(u=>u.AuditStatus.Contains(query.AuditStatus));
    }
    query.Total=temp.Count();
    return temp.OrderBy(u=>u.SortCode).Skip(query.PageSize*(query.PageIndex)).Take(query.PageSize);
    }
    (9)当我们完成业务逻辑层的时候,这时候我们就需要实现前台控制其中的代码,所以控制器中的实现代码如下:
    ///获取所有的用户信息
    ///返回用户详细信息的Json 对象
    public ActionResult GetAllUserInfos()
    { //Json格式的要求{total:22,rows:{}}
    //实现对用户分页的查询,rows:一共多少条,page:请求的当前第几页
    int pageIndex=Request["page"]==null?1:int.Parse(Request["page"]);
    int pageSize=Request["rows"]=null ?10:int.Parse(Request["rows"]);
    //得到多条件查询的参数
    string RealName=Request["RealName"];
    string Telephone=Request["Telephone"];
    string EMail=Request["EMail];
    int ?Enabled=Request["Enabled"]=null?-1:int.Parse(Request["Enabled"]);
    string AuditStatus=Request["AuditStatus"];
    int total=0;
    //调用分页的方法,传递参数,拿到分页之后的数据
    //var data=_userInfoService.LoadPageEntities(pageIndex,pageSize,out total,u=>true&&u.DeletionStateCode==0,true,u=>u.SortCode);
    //封装一个业务逻辑层的方法,来处理分页过滤事件
    UserInfoQuery userInfoQuery=new UserInfoQuery()
    {
    PageSize=pageSize,
    PageIndex=pageIndex,
    RealName=RealName,
    Telephone=Telephone,
    EMail=EMail,
    Enabled=Enabled,
    AuditStatus=AuditStatus,
    Total=0
    };
    var data=_userInfoService.LoadSearchData(userInfoQuery);
    //构造成JSON的格式传递
    var result=new {total=total,rows=data};
    return Json(result,JsonRequestBehavior.AllowGet);


    2、回收站的实现
    3、数据还原的实现
    if(Not=="not")
    {
    //伪删除,也就是根据用户的ID修改信息,首先查询出实体信息
    foreach(var deleteId in deleteIDList)
    {
    var EditUserDeleteIsNot=_userInfoService.LoadEntities(c=>c.ID==deleteId).FirstOrDefault();
    EditUserDeleteIsNot.DeletionStateCode=1;
    _userInfoService.UpdateEntity(userInfo);
    }
    return Content("OK");
    }
    else if(Not=="back")
    {
    foreach(var deleteID in deleteIDList)
    {
    var BackUserDelete=_userInfoService.LoadEntities(c=>c.ID==deleteID).FirstOrDefault();
    BackUserDelete.DeletionStateCode=0;
    _userInfoService.UpdateEntity(userInfo);
    }
    return Content("OK");
    }
    else
    {
    //最后执行批量删除数据的方法
    if(_userInfoService.DeleteUsers)deleteIDList)>0
    {
    return Content("OK");
    }
    }

    1、总结本周工作和学习的知识点

    2、继续学习C#访问数据库

    3、运用多条件模糊查询和回收站还原

  • 相关阅读:
    讨论: TDD in HTML & JavaScript 之可行性和最佳实践
    Enterprise Caching Summary
    NIntegrate SOA Practice – EAppointments Sample Application
    This is jqMVC# Definition & Summary
    LRU Caching Practice
    NIntegrate v0.9.0.1 released
    CrossDomain AJAX Enabled WCF Service
    突然发现想在博客园发起一个有价值的讨论其实很难
    Discuss some new features in WCF 4.0
    This is jqMVC# – CNBLOGS Google Tracer Sample
  • 原文地址:https://www.cnblogs.com/zzp0320/p/6945623.html
Copyright © 2011-2022 走看看