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)好了,大家都早點休息吧,好的身體是成功的一半!
源碼下載
(1):完整源碼下載
Kencery返回本系列開篇
