ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
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):用户信息的修改和浏览 (20):多条件模糊查询和回收站还原的实现 (21):用户角色权限基本的实现说明
前言:这段时间博客的更新比较慢,主要是这段时间工作上面比较忙点,晚上回来在吹吹风,写一点点的代码就能休息了,所以用了这段时间把代码基本写完了,但是博客的更新速度比较慢,主要是后面的这部分内容感觉博客不好写,一会在页面,一会在控制器,一会又在Model中操作,感觉写的乱而不识,虽然是这样,但是我们还是要写下去,给大家一个成型的东西才能感觉大完善,希望大家能够理解,那么今天我们就开始说我们今天的内容,今天的内容主要有这几个方向,(1):完善上篇博客中遗留的问题,(2):为用户设置权限,这个的实现效果和上篇博客基本一样,所以这里也就是基本提一下就行,(3):重新对页面进行布局,实现Tab页面。
1. 为用户设置角色遗留问题—全局查询
(1)上篇博客我们基本说完了为用户设置角色,但是我们按照以前的代码书写的话发现了一个问题,那就是我们的用户数据查询不到了,这是什么原因呢?其实原因也很简单,那就是用户和角色是多对多的关系,当我们为用户设置角色的话,用户表中会存放角色表的实体,而角色表则会存放用户表的实体,这个我们可以在Edmx模型中看到,那么为什么会这样呢?原因就是当我们序列化BaseUser实体的时候,发现含有BaseRole属性,这时候就要序列化BaseRole属性,这时候EF提供了一个序列化导航属性的时候的延迟加载起作用了,这样的话他就会循环的去查询BaseRole和BaseUser实体类,这样序列化的话就会发生死循环,所以会报错。
(2)根据上面我们也知道了以前的代码会出现错误,那么我们怎么避免这个错误,使我们的用户显示出来数据呢?其实我们只需要用linq将BaseUser字段全部查询出来即可,最后对用户的控制器查询效果修改之后的代码如下所示:
/// <summary>
/// 获取所有的用户信息
/// </summary>
/// <returns>返回用户详细信息的Json对象</returns>
public ActionResult GetAllUserInfos()
{
//Json格式的要求{total:22,rows:{}}
//实现对用户分页的查询,rows:一共多少条,page:请求的当前第几页
int pageIndex = Request["page"] == null ? : int.Parse(Request["page"]);
int pageSize = Request["rows"] == null ? : int.Parse(Request["rows"]);
//得到多条件查询的参数
string RealName = Request["RealName"];
string Telephone = Request["Telephone"];
string EMail = Request["EMail"];
int? Enabled = Request["Enabled"] == null ? - : int.Parse(Request["Enabled"]);
string AuditStatus = Request["AuditStatus"];
int? DeletionStateCode = Request["DeletionStateCode"] == null ? : int.Parse(Request["DeletionStateCode"]);
int total = ;
//调用分页的方法,传递参数,拿到分页之后的数据
//var data = _userInfoService.LoadPageEntities(pageIndex, pageSize, out total,
// u => true && u.DeletionStateCode == 0, true, u => u.SortCode);
//封装一个业务逻辑层的方法,来处理分页过滤事件
var userInfoQuery = new UserInfoQuery()
{
PageSize = pageSize,
PageIndex = pageIndex,
RealName = RealName,
Telephone = Telephone,
EMail = EMail,
Enabled = Enabled,
AuditStatus = AuditStatus,
Total = ,
DeletionStateCod = DeletionStateCode
};
//如果含有导航属性关联的话,出现循环引用的问题,死循环
var data = from u in _userInfoService.LoadSearchData(userInfoQuery)
select new
{
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.UserPassword
};
//构造成Json的格式传递
var result = new { total = userInfoQuery.Total, rows = data };
//return JsonDate(result);
return Json(result, JsonRequestBehavior.AllowGet);
}
(3)通过上述的代码实现我们就解决了我们前面提到我们遇到的问题,这里大家如果有什么不懂的话可以给我留言,可能我的预言表达能力不怎么好,只能表达到这里了。
2.为权限设置角色
(1)上述我们看到的这个标题大致的实现思路是固定的,因为我们在上一篇博客中已经介绍过了,为用户设置角色,这几个大的模块的实现思路基本是一样的,所以在这篇博客中我就不再介绍了,代码我都已经写完,希望大家可以参考上篇博客来实现这个功能。
(2)那么我们为什么给权限设置角色呢?看我们的Edmx模型其实大致就知道了,我这里简单的说一下,为用户设置角色,我们的角色中必然要对应于权限的操作,所有这样就出现了我们要为权限设置角色。
(3)实现效果如图所示:

3.EasyUI Tabs标签页面的实现
(1)在说这个的使用之前我们首先看一下我们以前的前台页面的架构,如图所示:
(2)那么看我们现在项目的前台页面的架构,我们可以发现我们引入了EasyUI Tabs之后的变化,如图所示:
(3)EasyUI Tabs控件实现了,但是在这里我们就会遇到当我们重复单击右边的导航的时候会发生什么变化,那么主要的代码如下:
//绑定菜单按钮的点击事件 MenuLink
function BindMenuClickEvent() {
$(".MenuLink").click(function () {
//获取按钮里面的src属性
var src = $(this).attr("src");
//将主框架的iframe跳转到菜单指向的地址
//$("#frmWorkArea").attr("src", src);
//得到节点的名字来放去Title
var title = $(this).text();
//拼接一个Iframe标签
var str = '<iframe id="frmWorkArea" width="100%" height="100%" frameborder="0" scrolling="yes" src="' + $(this).attr("src") + '"></iframe>'
//首先判断用户是否已经单击了此项,如果单击了直接获取焦点,负责打开
var isExist = $("#worktab").tabs('exists', title);
if (!isExist) {
//添加tab的节点,调用easyUITab标签的方法
$("#worktab").tabs('add', {
title: title,
content: str,
iconCls: 'icon-save',
closable: true
});
}
else {
//如果存在则获取焦点
$("#worktab").tabs('select', title);
}
});
}
4.这篇博客到这里基本就已经写完了,大家阅读的时候如果有什么问题可以给我留言,我将会在第一时间回复,这篇博客大家看起来可能有点吃力,因为不连贯,所以大家能够看看前面的博客在看这篇博客的时候将会很顺心的,那么下篇博客我们开始讲述权限组的实现。
源码下载
(1):完整源码下载
Kencery返回本系列开篇
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
随机推荐
- ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法
ORA-01652:无法通过128(在表空间temp中)扩展temp段 解决方法 (2016-10-21 16:49:53) 今天在做一个查询的时候,报了一个"ORA-01652无法通过 ...
- 基于Fragment的百度地图框架的使用
博客:http://blog.csdn.net/developer_jiangqq (一)基本介绍(Fragment和SupportMapFragment): Fragment的使用现在安卓APP开发 ...
- iOS开发之SQLite-C语言接口规范(一)——Ready And Open Your SQLite
为什么要搞一搞SQLite的C语言接口规范呢? 因为在做iOS开发中难免会遇到操作数据库的情况,你可以使用第三方的FMDB等,或者使用CoreData.但我们还是有必要去搞清楚如何去使用SQLite的 ...
- EntityFramework 7 开发纪录
博文目录: 暂时开发模式 Code First 具体体现 DbContext 配置 Entity 映射关联配置 Migration 问题纪录(已解决) 之前的一篇博文:EF7 Code First O ...
- 拨乱反正:DDD 回归具体的业务场景,Domain Model 再再重新设计
首先,把最真挚的情感送与梅西,加油! 写在前面 阅读目录: 重申业务场景 Domain Model 设计 后记 上一篇<设计窘境:来自 Repository 的一丝线索,Domain Model ...
- 【经验之谈】Git使用之Windows环境下配置
前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论坛的时候,经常有人提到github,有很多著名的开源软件都托管在github,想来肯定不错(莫笑),当 ...
- andriod 手机按键检测事件 onKeyDown() 简述
函数原型: public boolean onKeyDown(int keyCode, KeyEvent event); 第一个参数是用户按下键时,当前所接收到的按键代号: 第二个参数是按键事件的对象 ...
- IOS 开发中要注意的事项
1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...
- Hammer.js分析(四)——recognizer.js
不同识别器会使用不同逻辑,根据从相关Input类获取到的事件对象和事件,实现自定义的触屏事件,例如tap.pinch等. 一.继承关系 Recognizer与前面的Input一样,也相当于是个抽象类. ...
- Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...