博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用...
阅读量:7236 次
发布时间:2019-06-29

本文共 4979 字,大约阅读时间需要 16 分钟。

  ASP.NET MVC+EF框架+EasyUI实现权限管系列

                   

                

                 

               

          

           

    

  前言:这段时间博客的更新比较慢,主要是这段时间工作上面比较忙点,晚上回来在吹吹风,写一点点的代码就能休息了,所以用了这段时间把代码基本写完了,但是博客的更新速度比较慢,主要是后面的这部分内容感觉博客不好写,一会在页面,一会在控制器,一会又在Model中操作,感觉写的乱而不识,虽然是这样,但是我们还是要写下去,给大家一个成型的东西才能感觉大完善,希望大家能够理解,那么今天我们就开始说我们今天的内容,今天的内容主要有这几个方向,(1):完善上篇博客中遗留的问题,(2):为用户设置权限,这个的实现效果和上篇博客基本一样,所以这里也就是基本提一下就行,(3):重新对页面进行布局,实现Tab页面。

1. 为用户设置角色遗留问题—全局查询

  (1)上篇博客我们基本说完了为用户设置角色,但是我们按照以前的代码书写的话发现了一个问题,那就是我们的用户数据查询不到了,这是什么原因呢?其实原因也很简单,那就是用户和角色是多对多的关系,当我们为用户设置角色的话,用户表中会存放角色表的实体,而角色表则会存放用户表的实体,这个我们可以在Edmx模型中看到,那么为什么会这样呢?原因就是当我们序列化BaseUser实体的时候,发现含有BaseRole属性,这时候就要序列化BaseRole属性,这时候EF提供了一个序列化导航属性的时候的延迟加载起作用了,这样的话他就会循环的去查询BaseRole和BaseUser实体类,这样序列化的话就会发生死循环,所以会报错。

  (2)根据上面我们也知道了以前的代码会出现错误,那么我们怎么避免这个错误,使我们的用户显示出来数据呢?其实我们只需要用linq将BaseUser字段全部查询出来即可,最后对用户的控制器查询效果修改之后的代码如下所示:

1         ///  2  3         /// 获取所有的用户信息 4  5         ///  6  7         /// 
返回用户详细信息的Json对象
8 9 public ActionResult GetAllUserInfos()10 11 {12 13 //Json格式的要求{total:22,rows:{}}14 15 16 17 //实现对用户分页的查询,rows:一共多少条,page:请求的当前第几页18 19 int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);20 21 int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);22 23 //得到多条件查询的参数24 25 string RealName = Request["RealName"];26 27 string Telephone = Request["Telephone"];28 29 string EMail = Request["EMail"];30 31 int? Enabled = Request["Enabled"] == null ? -1 : int.Parse(Request["Enabled"]);32 33 string AuditStatus = Request["AuditStatus"];34 35 int? DeletionStateCode = Request["DeletionStateCode"] == null ? 0 : int.Parse(Request["DeletionStateCode"]);36 37 int total = 0;38 39 //调用分页的方法,传递参数,拿到分页之后的数据40 41 //var data = _userInfoService.LoadPageEntities(pageIndex, pageSize, out total,42 43 // u => true && u.DeletionStateCode == 0, true, u => u.SortCode);44 45 //封装一个业务逻辑层的方法,来处理分页过滤事件46 47 var userInfoQuery = new UserInfoQuery()48 49 {50 51 PageSize = pageSize,52 53 PageIndex = pageIndex,54 55 RealName = RealName,56 57 Telephone = Telephone,58 59 EMail = EMail,60 61 Enabled = Enabled,62 63 AuditStatus = AuditStatus,64 65 Total = 0,66 67 DeletionStateCod = DeletionStateCode68 69 };70 71 //如果含有导航属性关联的话,出现循环引用的问题,死循环72 73 var data = from u in _userInfoService.LoadSearchData(userInfoQuery)74 75 select new76 77 {78 79 u.ID,u.AuditStatus,u.Birthday,u.ChangePasswordDate,u.Code,u.CreateBy,u.CreateOn,u.CreateUserID,u.DeletionStateCode,u.DepartmentID,u.Description,u.Email,u.Enabled,u.Gender,u.HomeAddress,u.IsStaff,u.IsVisible,u.Mobile,u.ModifiedBy,u.ModifiedUserID,u.ModifirdOn,u.QICQ,u.QuickQuery,u.RealName,u.SecurityLevel,u.SortCode,u.Telephone,u.Title,u.UserFrom,u.UserName,u.UserPassword80 81 };82 83 //构造成Json的格式传递84 85 var result = new { total = userInfoQuery.Total, rows = data };86 87 //return JsonDate(result);88 89 return Json(result, JsonRequestBehavior.AllowGet);90 91 }

  (3)通过上述的代码实现我们就解决了我们前面提到我们遇到的问题,这里大家如果有什么不懂的话可以给我留言,可能我的预言表达能力不怎么好,只能表达到这里了。

2.为权限设置角色

  (1)上述我们看到的这个标题大致的实现思路是固定的,因为我们在上一篇博客中已经介绍过了,为用户设置角色,这几个大的模块的实现思路基本是一样的,所以在这篇博客中我就不再介绍了,代码我都已经写完,希望大家可以参考上篇博客来实现这个功能。

  (2)那么我们为什么给权限设置角色呢?看我们的Edmx模型其实大致就知道了,我这里简单的说一下,为用户设置角色,我们的角色中必然要对应于权限的操作,所有这样就出现了我们要为权限设置角色。

  (3)实现效果如图所示:

     

3.EasyUI Tabs标签页面的实现

  (1)在说这个的使用之前我们首先看一下我们以前的前台页面的架构,如图所示:

  (2)那么看我们现在项目的前台页面的架构,我们可以发现我们引入了EasyUI Tabs之后的变化,如图所示:

  (3)EasyUI Tabs控件实现了,但是在这里我们就会遇到当我们重复单击右边的导航的时候会发生什么变化,那么主要的代码如下:

1 //绑定菜单按钮的点击事件  MenuLink 2  3 function BindMenuClickEvent() { 4  5    $(".MenuLink").click(function () { 6  7        //获取按钮里面的src属性 8  9        var src = $(this).attr("src");10 11        //将主框架的iframe跳转到菜单指向的地址12 13        //$("#frmWorkArea").attr("src", src);14 15        //得到节点的名字来放去Title16 17        var title = $(this).text();18 19        //拼接一个Iframe标签20 21        var str = ''22 23        //首先判断用户是否已经单击了此项,如果单击了直接获取焦点,负责打开24 25        var isExist = $("#worktab").tabs('exists', title);26 27        if (!isExist) {28 29             //添加tab的节点,调用easyUITab标签的方法30 31             $("#worktab").tabs('add', {32 33                 title: title,34 35                 content: str,36 37                 iconCls: 'icon-save',38 39                 closable: true40 41               });42 43            }44 45            else {46 47                //如果存在则获取焦点48 49                $("#worktab").tabs('select', title);50 51            }52 53        });54 55   }

4.这篇博客到这里基本就已经写完了,大家阅读的时候如果有什么问题可以给我留言,我将会在第一时间回复,这篇博客大家看起来可能有点吃力,因为不连贯,所以大家能够看看前面的博客在看这篇博客的时候将会很顺心的,那么下篇博客我们开始讲述权限组的实现。

源码下载

   (1):

 

    Kencery

转载地址:http://itofm.baihongyu.com/

你可能感兴趣的文章
Fiddler 实现手机的抓包
查看>>
浅谈C++多态性
查看>>
[翻译] GVUserDefaults
查看>>
Openlayer跨域问题解决
查看>>
Windows7下的免费虚拟机(微软官方虚拟机)
查看>>
shell中判断用法
查看>>
js的 new image()---转
查看>>
Hibernate Criterion
查看>>
AFNetworking 使用方法(2.0)
查看>>
React Canvas:高性能渲染 React 组
查看>>
Mono产品生命周期
查看>>
FetchType与FetchMode的区别
查看>>
GCD && Run Loops学习笔记
查看>>
SQLite Learning、SQL Query Optimization In Multiple Rule
查看>>
文件编码格式(转)
查看>>
开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
查看>>
js控制select选中显示不同表单内容
查看>>
HTML5--Audio
查看>>
地铁线路图计算--路由计算及设计参考
查看>>
[] ubuntu 14.04 搜狗拼音输入法安装
查看>>