ASP.NET MVC+EF框架+EasyUI實現權限管系列
(開篇) (1):框架搭建 (2):數據庫訪問層的設計Demo (3):面向接口編程 (4 ):業務邏輯層的封裝
(5):前台Jquery easyUI實現 (6):EF上下文實例管理 (7):DBSession的封裝 (8):DBSession線程內唯一
(9):TT摸版的學習 (10):VSS源代碼管理 (11):驗證碼實現和底層修改
前言:上篇博客我們簡單的講述了一下驗證碼的實現和Func<T,bool>,Expreesion<Func<T,bool>>的區別,我也看到了大家的評論,在這里我很高興能看到大家積極的評論我項目中的一些小的問題,也希望大家在后面能夠積極的給我的項目給出意見,只有這樣我覺得我才能學的更多,而且大家也能夠學到一定的東西,那么下面我們就開始實現我們的今天的東西,今天我想主要實現用戶異步登錄以及對T4摸版的實現,這也是整個項目底層最終的完成版,從下篇博客開始我們就要設計權限了。
1. 使用Jquery發送異步請求
(1)上篇博客我們已經實現了驗證碼以及用戶界面的設置,在這里秀一下界面:
(2)下面我們首先在前台頁面寫代碼發送異步請求,因為我們是使用Jquery發送異步請求的,所以我們就必須引入Jquery文件,發送異步請求的代碼如下,我寫了很詳細的注釋,其他的這里我就不解釋了。
1 @*引用Jquery文件的JS腳本*@ 2 3 <script src="~/Scripts/jquery-1.7.1.js"></script> 4 5 <script type="text/javascript"> 6 7 //當用戶刷新頁面觸發的方法 8 9 $(function() { 10 11 //實現用戶登錄的方法 12 13 LoginUserInfo(); 14 15 //單擊的時候修改驗證碼的方法 16 17 ClickRemoveChangeCode(); 18 19 }); 20 21 //實現用戶登錄 22 23 function LoginUserInfo() { 24 25 //獲取單擊用戶登錄按鈕的事件 26 27 $("#btnLogin").click(function() { 28 29 //首先獲取到要傳遞到控制器的參數,並且狗造成Json。UName,Pwd,Code 30 31 var postData = { 32 33 UName: $("#UName").val(), 34 35 Pwd: $("#Pwd").val(), 36 37 Code: $("#Code").val() 38 39 }; 40 41 //發送異步請求實現登錄 42 43 $.post("/Login/CheckUserInfo", postData, function(data) { 44 45 if (data == "OK") { 46 47 window.location.href = "/Home/Index"; 48 49 } else { 50 51 alert(data); 52 53 window.location.href = "/Login/Index"; 54 55 } 56 57 }); 58 59 }); 60 61 } 62 63 //單擊重新改變驗證碼 64 65 function ClickRemoveChangeCode() { 66 67 //首先我們獲取到驗證碼的路徑 68 69 var code = $("#imgCode").attr("src"); 70 71 //然后重新給驗證碼的路徑賦值 72 73 $("#imgCode").attr("src", code + "1"); 74 75 } 76 77 </script>
(3)通過上面的方法我們就將整個用戶登錄需要的信息(用戶名,密碼,驗證碼)已經發送給控制器了,這時候我們控制器里面就要調用業務邏輯層進行對用戶名和密碼的驗證。
2.業務邏輯層驗證用戶名密碼是否正確
(1)上面我們已經寫完了發送請求的Jquery方法,那么這時候我們看到了我們要實現Login控制器下面的CheckUserInfo方法,那么這時候我們還缺什么呢?當然是我們就要去實現驗證用戶名密碼是否正確的業務邏輯的書寫,針對這個項目下面我說一下要實現一個業務邏輯的方法的一般步驟如下。
(2)第一步:一般情況下,首先我們會去業務邏輯接口層(LYZJ.UserLimitMVC.IBLL)去加接口約束,針對用戶登錄的話如果登錄成功,我們返回用戶登錄信息的實體,傳遞的參數也是用戶需要的實體對象,當然我們也可以傳遞用戶名,密碼等字符串,這里的取決在於自己,那么我們給IUserInfoService類中加的接口如下:
1 public interface IUserInfoService:IBaseService<UserInfo> 2 3 { 4 5 //在這里添加一個用戶登錄信息的約束 6 7 UserInfo CheckUserInfo(UserInfo userInfo); 8 9 }
(3)第二步:當我們加完接口約束之后,我們就去業務邏輯層(LYZJ.UserLimitMVC.BLL)的UserInfoService類里面去實現接口,在這里我們實現驗證用戶名密碼是否正確的方法。
1 //完成了對用戶的校驗 2 3 public UserInfo CheckUserInfo(UserInfo userInfo) 4 5 { 6 7 //在這里會去數據庫檢查是否有數據,如果沒有的話就會返回一個空值 8 9 return _DbSession.UserInfoRepository.LoadEntities(u => u.UName == userInfo.UName && u.Pwd == userInfo.Pwd).FirstOrDefault(); 10 11 }
(4)經過上面的兩步,現在我們已經實現了判斷用戶名密碼是否正確的方法,那么下面我們就是去控制器中直接調用我們在業務邏輯層完成的方法即可。
3.在控制器中驗證驗證碼是否正確和用戶登錄的過程
(1)當我們完成在業務邏輯層對用戶是否正確的判斷之后,這時候我們就要去控制器中實現最終的判斷了,這時候我們在控制器中首先要判斷驗證碼是否正確,其次我們就是判斷用戶輸入的用戶名密碼是否正確,代碼中都寫了注釋,就不詳細說了。
1 //實例化UserInfo接口的對象 2 3 private IBLL.IUserInfoService _userInfoService = new UserInfoService(); 4 5 //實現用戶的登錄 6 7 public ActionResult Index() 8 9 { 10 11 return View(); 12 13 } 14 15 //判斷用戶輸入的信息是否正確 16 17 [HttpPost] 18 19 public ActionResult CheckUserInfo(UserInfo userInfo, string Code) 20 21 { 22 23 //首先我們拿到系統的驗證碼 24 25 string sessionCode = this.TempData["ValidateCode"] == null 26 27 ? new Guid().ToString() 28 29 : this.TempData["ValidateCode"].ToString(); 30 31 //然后我們就將驗證碼去掉,避免了暴力破解 32 33 this.TempData["ValidateCode"] = new Guid(); 34 35 //判斷用戶輸入的驗證碼是否正確 36 37 if (sessionCode != Code) 38 39 { 40 41 return Content("驗證碼輸入不正確"); 42 43 } 44 45 //調用業務邏輯層(BLL)去校驗用戶是否正確 46 47 var loginUserInfo = _userInfoService.CheckUserInfo(userInfo); 48 49 if (loginUserInfo != null) 50 51 { 52 53 return Content("OK"); 54 55 } 56 57 else 58 59 { 60 61 return Content("用戶名密碼錯誤"); 62 63 } 64 65 }
(2)到這里我們的登錄就搞完事了,這時候你可以自己去試着登錄了。下面我秀幾張登錄的圖片。
4.登錄狀況的圖片
(1)通過上面的介紹,現在我們已經實現了登錄的效果,但是在這里我沒有對登錄是否輸入做驗證,也就是幾個文本框必須輸入內容沒有做驗證,但是不輸入內容的話用戶登錄還是登錄不了,會提示后台返回錯誤。
5.T4模版
(1)這篇博客我將T4模版寫在這里的意思是我要寫完這個項目的所有用到T4模版的地方,因為我們的項目在數據訪問層以及業務邏輯層都有很多東西能夠自動生成出來,所以我選擇寫T4模版,但是在這篇博客我就不列出來了,因為在以前我已經寫過一個例子了,他們和我們修改其他層的T4模版的代碼基本都一樣,地址是: http://www.cnblogs.com/hanyinglong/archive/2013/04/18/3029649.html。
(2)今天不知道怎么了,有點頭疼,T4模版我不行的話明天會寫的,本來打算今天先把以前寫的這部分博客上傳的,但是現在看來不可能了。如果各位誰需要的話,留言,我明天晚上上傳之后把地址發給你們。
5.小結
(1)隨着項目現在已經進入了前面的實現界面的過程了,現在開始我也就不仔細的寫了,只要寫一些重要的代碼即可,當然如果遇到業務的話我還是會仔細講的,希望大家能夠慢慢領會吧,趕緊上傳了休息會,頭要炸了!
(2)最后感謝我群里的朋友對我的項目提出的寶貴意見,謝謝你們!
由於上面的登錄頁面我是在網上下載的,如果有任何版權問題,請及時聯系我們,我將第一時間修改~
源碼下載
(1):完整源碼下載
Kencery返回本系列開篇
相信自己,你就是下一個奇跡!