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):過濾器的使用和批量刪除數據(偽刪除和直接刪除)
前言:昨天我們大致說了一下用戶的刪除以及使用過濾器過濾用戶的登錄,當在刪除的時候我們我們使用了批量刪除數據,也就是用戶可以選擇多條數據進行刪除,而且我們實現了直接刪除和偽刪除的功能,直接刪除就是用戶將這條信息直接刪除了,而偽刪除確是用戶只修改了標識是否刪除的標記,最后我們我們還實現了過濾器的功能,也就是用戶只有登錄了才能夠進行一系列的操作,負責不管用戶怎么操作都會跳轉到登錄頁面讓用戶登錄。
今天我們就來實現用戶的修改和瀏覽,為什么將這兩個放到一起呢?因為我覺得這兩個功能基本差不多,所以最后肯定就將這兩個方法封裝起來而使代碼變得更加簡單一些,下面我們就開始我們今天的博客吧。
1. 用戶信息的修改—讀取信息顯示在層上面
(1)首先我們知道用戶信息修改的話,我們只能選擇一條數據進行修改,所以我們在代碼中就要做限制用戶只能選擇一條數據,這是我們應該注意的一個細節。
(2)那么我們如何來實現用戶的修改呢?EasyUI提供了一種方法,很簡單的,但是我覺得不適用我這個項目,因為我在修改的時候會拿出很多在添加的時候數據庫中沒有的值,但是我們的EasyUI的DataGird里面的值確實很有限的,也就是說不是數據庫中的所有的值,我們去不出來一些需要修改的值,那么這樣的話我就產生了一個這樣的思路,我首先拿到用戶的ID,然后直接去后台查詢用戶信息然后返回給前台,這樣前台就可以拿到用戶的所有信息了,這就是我的第一種思路,還有就是第二種思路直接使用MVC自帶的那些擴展控件來實現直接讀取。
(3)那么下面我們開始來實現用戶修改信息的第一步,首先我們能夠讀取到用戶的所有信息顯示在彈出層里面,我們就按照上述的方法來實現,那么讀取用戶顯示顯示在層上的代碼如下,彈出層圖紙賦下面:
1 //綁定修改顯示詳細信息的方法 2 3 function BindShowUpdateUserInfo() { 4 5 //首先用戶發送一個異步請求去后台實現方法 6 7 var ID = $("#test").datagrid("getSelections")[0].ID; //獲取到了用用戶選擇的ID 8 9 $.get("/UserInfo/GetUserInfos", { ID: ID }, function (userInfo) { 10 11 $("#UserName1").val(userInfo.UserName); 12 13 $("#RealName1").val(userInfo.RealName); 14 15 $("#Email1").val(userInfo.Email); 16 17 $("#SecurityLevel1").combobox('setValue', userInfo.SecurityLevel); 18 19 $('input[name="Gender"]:checked').val(userInfo.Gender); 20 21 $("#Birthday1").datebox('setValue', userInfo.Birthday); 22 23 $("#Mobile1").val(userInfo.Mobile); 24 25 $("#Telephone1").val(userInfo.Telephone); 26 27 $("#QICQ1").val(userInfo.QICQ); 28 29 $("#SortCode1").val(userInfo.SortCode); 30 31 $("#IsStaff").combobox('setValue', userInfo.IsStaff); 32 33 $("#IsVisible").combobox('setValue', userInfo.IsVisible); 34 35 $("#Enabled").combobox('setValue', userInfo.Enabled); 36 37 $("#AuditStatus").combobox('setValue', userInfo.AuditStatus); 38 39 $("#Description1").val(userInfo.Description); 40 41 }); 42 43 } 44 45 //根據用戶ID讀取當前用戶的信息 46 47 public JsonResult GetUserInfos(int ID) 48 49 { 50 51 //根據ID的到當前選中的用戶的信息 52 53 var userInfos = _userInfoService.LoadEntities(c => c.ID == ID).FirstOrDefault(); 54 55 return Json(userInfos, JsonRequestBehavior.AllowGet); 56 57 }
(4)通過上面我們就完成了我們的初步讀取信息的過程,那么在這個里面還有一個Bug我還沒有改過來,那么是性別的讀取,我拿到值之后如何賦值給控件呢?我寫了Js的方法但是好像實現不了,所以我這里暫時還不知道什么原因。如果大家知道的話可以給我留言,謝謝。
2.用戶信息的修改
(1)根據第一個知識點我們已經拿到了用戶的信息,那么這時候我們就需要對用戶的信息進行修改並且保存,那么現在我們開始描述我們修改用戶的方法,首先我們還是給后台發送異步請求,請求的代碼如下:
1 //修改用戶的信息 2 3 function UpdateUserInfo() { 4 5 //首先取出來用戶選擇的數據的ID 6 7 var rows = $("#test").datagrid("getSelections"); 8 9 //首先取出來值判斷用戶只能選擇一個 10 11 if (rows.length != 1) { 12 13 $.messager.alert("友情提示", "每次只能修改一條,你已經選擇了<font color='red' size='6'>" + rows.length + "</font>條", "error"); 14 15 return; 16 17 } 18 19 //處理修改的信息,彈出修改的對話框,然后顯示選擇的用戶的詳細信息 20 21 $("#DivUpdateUser").dialog('open').dialog('setTitle', '用戶修改信息'); 22 23 //綁定修改顯示詳細信息的方法 24 25 BindShowUpdateUserInfo(); 26 27 //綁定修改事件 28 29 //BindUpdateUserInfo(); 30 31 } 32 33 //修改用戶的相信信息 34 35 function BindUpdateUserInfo() { 36 37 $("#btnUpdate").click(function () { 38 39 //首先也是對用戶進行檢測 40 41 var validate = $("#ffUpdate").form("validate"); 42 43 if (validate == false) { 44 45 return false; 46 47 } 48 49 //構造參數發送給后台 50 51 var posData = $("#ffUpdate").serializeArray(); 52 53 $.get("/UserInfo/UpdateUserInfo", posData, function (date) { 54 55 if (date == "OK") { 56 57 //修改成功,關閉彈出層,刷新DataGird 58 59 alert("修改成功"); 60 61 $("#DivUpdateUser").dialog('close'); 62 63 $("#test").datagrid("reload"); 64 65 } 66 67 else { 68 69 $.messager.alert("友情提示", "修改失敗,請您檢查"); 70 71 } 72 73 }) 74 75 }); 76 77 }
(2)當我們寫完前台的時候這時候我們就要去后台實現修改的方法,這里也就不說了,很簡單的,我們直接上代碼,如果大家有不懂的地方可以Q我,或者留言都行,代碼如下:
1 //根據用戶ID信息修改用戶的信息 2 3 public ActionResult UpdateUserInfo(BaseUser userInfo) 4 5 { 6 7 //首先根據傳遞過來的參數查詢出要修改的信息 8 9 var editUserInfo = _userInfoService.LoadEntities(c => c.ID == userInfo.ID).FirstOrDefault(); 10 11 if (editUserInfo == null) 12 13 { 14 15 return Content("錯誤信息,請您檢查"); 16 17 } 18 19 //對用戶的信息進行修改 20 21 editUserInfo.UserName = userInfo.UserName; 22 23 editUserInfo.RealName = userInfo.RealName; 24 25 editUserInfo.QuickQuery = userInfo.UserName; 26 27 editUserInfo.Email = userInfo.Email; 28 29 editUserInfo.SecurityLevel = userInfo.SecurityLevel; 30 31 editUserInfo.Gender = userInfo.Gender; 32 33 editUserInfo.Birthday = userInfo.Birthday; 34 35 editUserInfo.Mobile = userInfo.Mobile; 36 37 editUserInfo.Telephone = userInfo.Telephone; 38 39 editUserInfo.QICQ = userInfo.QICQ; 40 41 editUserInfo.SortCode = userInfo.SortCode; 42 43 editUserInfo.IsStaff = userInfo.IsStaff; 44 45 editUserInfo.IsVisible = userInfo.IsVisible; 46 47 editUserInfo.Enabled = userInfo.Enabled; 48 49 editUserInfo.AuditStatus = userInfo.AuditStatus; 50 51 editUserInfo.Description = userInfo.Description; 52 53 editUserInfo.ModifirdOn = DateTime.Parse(DateTime.Now.ToString()); 54 55 BaseUser user = Session["UserInfo"] as BaseUser; 56 57 editUserInfo.ModifiedUserID = user.Code; //獲取修改信息的ID 58 59 editUserInfo.ModifiedBy = user.UserName;//獲取修改此用戶的用戶名 60 61 if (_userInfoService.UpdateEntity() > 0) 62 63 { 64 65 return Content("OK"); 66 67 } 68 69 return Content("Error"); 70 71 }
(3)這樣我們就實現了用戶的修改,但是在這里我們需要注意的是前台我們在調用修改的Jquery方法的時候我們要在頁面首次刷新的時候就調用一次這個方法,而不是在下面的單擊按鈕上面,如果實在單擊按鈕上的話,那么很容易造成連續發好幾次請求,也就是執行成功好幾次。
(4)那么當我們再次的修改用戶的時候,我們也要注意用戶的那些信息是不能重復的,所以我們再次的重寫用戶修改的判斷代碼如下:
1 //檢測注冊用戶登錄名和修改用戶名不能重復 2 3 function CheckUserName() { 4 5 $("#UserName,#UserName1").blur(function () { 6 7 //得到驗證控件的值 8 9 var UserNameCheck = $("#UserName").val() 10 11 UserNameCheck = $("#UserName1").val(); 12 13 //發送異步請求去驗證用戶名不能重復 14 15 $.get("/UserInfo/CheckUserName", { UserName: UserNameCheck }, function (date) { 16 17 if (date == "OK") { 18 19 alert("該用戶已經存在"); 20 21 $("#UserName").val(""); 22 23 $("#UserName1").val(""); 24 25 return; 26 27 } 28 29 }); 30 31 }); 32 33 }
3.用戶信息的瀏覽
(1)那么這時候因為我們數據庫中存了很多東西,所以我們需要有一個層當我們需要看某些信息的時候給我們顯示出來,這樣就產生了用戶信息的修改,其實我們再上面也大致看過了這個思路,但是我在這里想怎么能夠實現重用的顯示用戶的信息,最后進過確認就形成了現在的形式。
(2)首先我們到代碼上面去重用代碼,代碼里面我都書寫了大量的注釋,大家可以去看詳細代碼如下:
1 //修改用戶的信息 2 3 function UpdateUserInfo(browse) { 4 5 //首先取出來用戶選擇的數據的ID 6 7 var rows = $("#test").datagrid("getSelections"); 8 9 //首先取出來值判斷用戶只能選擇一個 10 11 if (rows.length != 1) { 12 13 $.messager.alert("友情提示", "每次只能修改/瀏覽一條,你已經選擇了<font color='red' size='6'>" + rows.length + "</font>條", "error"); 14 15 return; 16 17 } 18 19 if (browse == null) { 20 21 //處理修改的信息,彈出修改的對話框,然后顯示選擇的用戶的詳細信息 22 23 $("#DivUpdateUser").dialog('open').dialog('setTitle', '用戶修改信息'); 24 25 //綁定修改顯示詳細信息的方法 26 27 BindShowUpdateUserInfo(); 28 29 } 30 31 else { 32 33 //處理瀏覽的信息,彈出瀏覽狂,然后顯示瀏覽信息的相信信息 34 35 //綁定用戶的瀏覽信息 36 37 BindBrowerUserInfo(); 38 39 } 40 41 //綁定修改事件 42 43 //BindUpdateUserInfo(); 44 45 }
(3)上述代碼就是我們實現代碼重用的部分,至於綁定用戶的瀏覽信息,我這里就不詳細描述了,因為我在上面已經第一個信息里面就已經給出了詳細的信息。
4.小結
(1)這篇博客到這里我們差不多都已經實現了,現在越來越感覺自己寫這些東西有點羅嗦了,當然了用戶信息馬上完成,當用戶完成之后我就會立即直接轉入到權限的分析,角色和權限的增刪改查錄入等信息就不會再展示出來了,在這里給大家做個說明,畢竟如果要實現權限的話還是要有數據的。下面我將展示一些我們今天完成的效果
源碼下載
(1):完整源碼下載
Kencery返回本系列開篇