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):权限数据库模型和用户登录详细错误
前言:前篇博客我们写了一下登录出现详细错误的简单代码,大家是不是感觉很简单呢,其实我感觉也是,但是这也是别人提出来的需求,所以我就顺便写了,现在这样的话我感觉我们是写的很慢,但是我写的足够详细了,也就是基本在一步一步走出精彩的教怎么去写,所以我一直说这个系列适合从开篇开始看,然后一直看结束,这样的话我们就会收获很多东西,但是我现在想我是写仔细点还是
1. 类库架构扩展
(1)如果大家看我的这个系列的话,看到这里的时候,大家可以看到我的解决方案还是各个类库都显示在下面,如图所示:
(2)那么如上图所示的话,大家有没有感觉到非常的多呢,当然了我相信大部分感觉不来,因为我的这个项目不是一个大项目,它所涉及到的类库也就这么6个,但是大家可以想象一下,如果你的类库是100多个,200多个甚至更多呢?那么我们这样存放的话是不是感觉很乱呢,所以VS为我们提供了一个虚拟的文件夹(文件夹本身不存在,只在VS下面显示的是文件夹,如果你打开项目的存放位置,发现没有这些文件夹),所以我们在解决方案上面右击添加一个新建解决方案文件夹,这样就能实现我说的上面的功能,那么修改后的架构如图所示:
(3)Implement虚拟文件夹,存放的是实现业务逻辑层和数据库访问层的实现类
(4)InterFace 虚拟文件夹,存放的是实现业务逻辑层和数据库访问层的实现接口
(5)Model 虚拟文件夹,存放的是公用类和实体框架的东西。
2.在一个固定的文件夹下面生成DLL文件
(1)首先我们为什么要在一个固定的文件夹下面生成DLL文件呢?向我们前面的项目写法那样不是也挺好的吗,当然这样还是有这样的好处了,请听我慢慢说来。
(2)如果是小项目的话我们按照上面所述的那样是可以了,但是如果我们的项目是很多的,有几十个几百个呢?那么我们上面的那种严重不行,因为其中的一两个项目生成不过去,那么你的解决方案也就会生成不过去,那么我们现在希望有一两个项目生成不过去,但是我们的解决方案还是能生成过去,这样的话我们就产生了下面的解决方案。
(3)比如说:我们的项目BLL层依赖DAL层,那么这时候即使DAL层生成不过去,我们也要求BLL层能够生成过去,但是我们如果直接添加项目引用的话肯定是不行的,因为如果添加项目引用的话我们如果生产BLL层的话他会先去生成DAL层,但是DAL层会报错,所以解决方案生成会失败。
(4)那么怎么解决呢?首先在我们解决方案下面新建一个文件夹Lib,就是专门来存放所有的DLL文件。这时候我们到所有的类库的属性里面去修改一些内容,右键单击各个类库的属性,选择生成,然后修改输出路径(输出DLL文件到指定的文件夹下面)到刚才我们新建的那个文件夹下面,然后保存掉项目,然后在去文件夹下面检查一下即可,如图所示:
(5)最后我们将所有的类库都按照上面所说的格式进行修改,然后我们可以去看看我们建立的那个文件夹下面的东西,如图所示:
(6)那么这时候我们项目如果想要添加引用的话我们可以直接去这个文件夹下面添加引用,而不用去各个项目中添加引用了,这样我们就解决了当前的事情,从现在开始我们整个项目的基础基本都已经完事了,我们可以开始写前台所有的实现信息了,最后我们将我们今天实现的内容进行签入到源代码管理器。
3.用户添加实现的总体介绍
(1)根据上面所说,到这里我们就开始实现用户的功能了,还是一句话,用户的功能我会写的稍微详细点,后面还有角色和权限大家懂的,就不说了,那么下面我们还是直接上图看:
(2)这里的用户添加我们使用的是easyUI的控件来打造的,下面如果我们开发用户添加的话我们应该分成几个步骤来实现呢?下面我们说一下:首先就是界面的搭建,我们大家已经看到了easyUI搭建的界面,其次就是Jquery发送异步请求的代码,最后就是我们项目主要的代码,那就是如何实现功能,下面我们就根据这三点来实现用户添加这个功能。
4.实现用户添加的步骤
(1)使用easyUI搭建界面,前面我们已经说了引用easyUI的东西,最后的HTML代码如下:
1 <!--------------------------添加用户信息的弹出层----------------------------> 2 3 <div id="DivAddUser" class="easyui-dialog" style="width:580px;height:400px;padding:10px 20px" 4 5 closed="true" resizable="true" modal="true" buttons="#dlg-buttons"> 6 7 <form id="ff" method="post" novalidate="novalidate"> 8 9 <fieldset> 10 11 <legend>用户必填信息</legend> 12 13 <table id="tblAdd"> 14 15 <tr> 16 17 <td><label for="UserName">登录名:</label></td> 18 19 <td> 20 21 <input class="easyui-validatebox" type="text" id="UserName" name="UserName" data-options="required:true,validType:'length[1,32]'" /> 22 23 </td> 24 25 <td><label for="RealName"> 真实姓名:</label></td> 26 27 <td> 28 29 <input class="easyui-validatebox" type="text" id="RealName" name="RealName" data-options="required:true,validType:'length[1,200]'" /> 30 31 </td> 32 33 </tr> 34 35 <tr> 36 37 <td><label for="UserPassword">密码:</label></td> 38 39 <td> 40 41 <input class="easyui-validatebox" type="text" id="UserPassword" name="UserPassword" data-options="required:true,validType:'length[1,200]'" /> 42 43 </td> 44 45 <td><label for="OKUserPassword"> 确认密码:</label></td> 46 47 <td> 48 49 <input class="easyui-validatebox" type="text" id="OKUserPassword" name="OKUserPassword" data-options="required:true" validType="equalTo['UserPassword']" invalidMessage="两次输入的密码不匹配" /> 50 51 </td> 52 53 </tr> 54 55 </table> 56 57 </fieldset> 58 59 <br /> 60 61 <fieldset> 62 63 <legend>用户选填信息</legend> 64 65 <table id="tblAdd1"> 66 67 <tr> 68 69 <td><label for="Email">EMail:</label></td> 70 71 <td> 72 73 <input class="easyui-validatebox" type="text" id="Email" name="Email" data-options="validType:'email'"/> 74 75 </td> 76 77 <td><label for="SecurityLevel"> 安全级别:</label></td> 78 79 <td> 80 81 <select id="SecurityLevel" class="easyui-combobox" style="width:154px;" name="SecurityLevel" data-options="required:true"> 82 83 <option value="1">1</option> 84 85 <option value="2">2</option> 86 87 <option value="3">3</option> 88 89 <option value="4">4</option> 90 91 <option value="5">5</option> 92 93 <option value="6">6</option> 94 95 <option value="7">7</option> 96 97 <option value="8">8</option> 98 99 <option value="9">9</option> 100 101 <option value="10">10</option> 102 103 </select> 104 105 </td> 106 107 </tr> 108 109 <tr> 110 111 <td><label for="Gender">性别:</label></td> 112 113 <td> 114 115 <input class="easyui-validatebox" type="radio" name="Gender" id="Boy" value="男" checked="checked" />男 116 117 <input class="easyui-validatebox" type="radio" name="Gender" id="Girl" value="女" />女 118 119 <input class="easyui-validatebox" type="radio" name="Gender" id="No" value="未知" />未知 120 121 </td> 122 123 <td><label for="Birthday"> 出生日期:</label></td> 124 125 <td> 126 127 <input id="Birthday" style="width:154px;" class="easyui-datebox" required="required" name="Birthday" /> 128 129 </td> 130 131 </tr> 132 133 <tr> 134 135 <td><label for="Mobile">手机号码:</label></td> 136 137 <td> 138 139 <input class="easyui-numberbox" type="text" id="Mobile" name="Mobile"/> 140 141 </td> 142 143 <td><label for="Telephone"> 电话号码:</label></td> 144 145 <td> 146 147 <input class="easyui-numberbox" type="text" id="Telephone" name="Telephone"/> 148 149 </td> 150 151 </tr> 152 153 <tr> 154 155 <td><label for="QICQ">QQ号码:</label></td> 156 157 <td> 158 159 <input class="easyui-numberbox" type="text" id="QICQ" name="QICQ" /> 160 161 </td> 162 163 <td><label for="SortCode"> 排序码:</label></td> 164 165 <td> 166 167 <input class="easyui-validatebox" type="text" id="SortCode" name="SortCode" /> 168 169 </td> 170 171 </tr> 172 173 <tr> 174 175 <td><label for="Description">备注信息:</label></td> 176 177 <td colspan="3"> 178 179 <textarea style="height:50px; width:406px;" id="Description" name="Description" ></textarea> 180 181 </td> 182 183 </tr> 184 185 <tr> 186 187 <td colspan="4" style="text-align:center; padding-top:10px"> 188 189 <a href="javascript:void(0)" class="easyui-linkbutton" id="btnRegist" iconcls="icon-ok" >确定</a> 190 191 <a href="javascript:void(0)" class="easyui-linkbutton" iconcls="icon-cancel" onclick="javascript:$('#AddUserDialog').dialog('close')">关闭</a> 192 193 </td> 194 195 </tr> 196 197 </table> 198 199 </fieldset> 200 201 </form> 202 203 </div>
(2)使用Jquery发送异步请求,代码如下:
1 //绑定注册按钮的事件 2 3 function bindRegisteButtonClickEvent() { 4 5 $("#btnRegist").click(function () { 6 7 //判断用户的信息是否通过验证 8 9 var validate = $("#ff").form('validate'); 10 11 if (validate == false) { 12 13 return false; 14 15 } 16 17 //获取参数传递给前台 18 19 var postData = { 20 21 UserName: $("#UserName").val(), 22 23 RealName: $("#RealName").val(), 24 25 UserPassword: $("#UserPassword").val(), 26 27 Email: $("#Email").val(), 28 29 SecurityLevel: $("#SecurityLevel").combobox('getValue'), 30 31 Gender: $('input[name="Gender"]:checked').val(), 32 33 Birthday: $("#Birthday").datebox('getValue'), 34 35 Mobile: $("#Mobile").val(), 36 37 Telephone: $("#Telephone").val(), 38 39 QICQ: $("#QICQ").val(), 40 41 SortCode: $("#SortCode").val(), 42 43 Description: $("#Description").val() 44 45 }; 46 47 //发送异步请求到后台保存用户数据 48 49 $.post("/UserInfo/RegisterUser", postData, function (data) { 50 51 if (data = "OK") { 52 53 //添加成功 1.关闭弹出层,2.刷新DataGird 54 55 alert("添加成功"); 56 57 $("#DivAddUser").dialog("close"); 58 59 $("#test").datagrid("reload"); 60 61 } 62 63 else { 64 65 alert("添加失败,请您检查"); 66 67 } 68 69 }); 70 71 }); 72 73 }
(3)控制器实现对用户的添加,控制器中的代码如下:
1 public ActionResult RegisterUser(BaseUser userInfo) 2 3 { 4 5 //首先保存一些需要录入数据库的信息 6 7 userInfo.Code = Guid.NewGuid().ToString(); //随机产生的一些数据 8 9 userInfo.QuickQuery = userInfo.UserName; //获取数据的查询码 10 11 userInfo.UserFrom = "添加"; //用户来源 12 13 userInfo.Lang = "汉语"; //默认系统识别的是汉语 14 15 userInfo.IsStaff = (Int32?)StaffEnum.OK; //默认是职员 16 17 userInfo.IsVisible = (Int32?)VisibleEnum.OK; //默认显示信息 18 19 userInfo.Enabled =(Int32?)EnabledEnum.OK; //默认用户有效 20 21 userInfo.AuditStatus ="已审核"; //默认添加的用户已经经过审核 22 23 userInfo.DeletionStateCode = (Int32?)DeletionStateCodeEnum.Normal; //默认没有伪删除 24 25 userInfo.CreateOn = DateTime.Parse(DateTime.Now.ToString()); //默认创建用户日期 26 27 BaseUser user = Session["UserInfo"] as BaseUser; 28 29 userInfo.CreateUserID = user.Code; //获取添加此用户的管理者的ID 30 31 userInfo.CreateBy = user.UserName;//获取添加此用户的管理者的名称 32 33 //执行添加用户的代码 34 35 _userInfoService.AddEntity(userInfo); 36 37 return Content("OK"); 38 39 }
5.小结
(1)到这里我们用户的添加功能就实现了,但是还有很多的问题我们需要注意,一些简单的Bug或者验证等我明天在于大家说,这篇博客的篇幅已经很长了,不能再长了,希望大家理解,如果大家有什么疑问的话可以留言,谢谢你的观看。
(2)最后上一张添加成功的图纸给大家看看,如图所示:
(3)好了,大家都早点休息吧,好的身体是成功的一半!
Kencery返回本系列开篇