近期項目使用MVC開發,首先遇到的登入問題,之前使用aspx開發 挺簡單的一個功能,使用MVC便閑的無從下手了,目前問題已經解決,記錄下來,經過想了半天決定藉助ajax處理驗證,驗證通過後,直接進行提交跳轉,jquery驗證如下 ,需要引用jquery 組建就不說了。
function loginValidate() { var kk = true; $.ajax({ type: "POST", dataType: "text", url: "/Helpers/admin_ajax.ashx", cache: false, timeout: 10000, async: false, data: { sign: "CheckLogin", username: $("#username").val(), password: $("#password").val(), validatecode: $("#validateCode").val() }, success: function (data) { if (data != "true") { $("#lblTip").show(); $("#lblTip").html(data); kk=false; } }, error: function (data) { $("#lblTip").html("登入失敗,請重新整理頁面重試"); kk=false; } }); return kk; }
login.cshtml頁面有個地方需要主要 form表單中需要寫明onsubmit="return loginValidate()" 或者submit按鈕提交時 onclick="return loginValidate()" 以確保終止提交
admin_ajax.ashx處理如下,
/// <summary> /// 登入驗證 /// </summary> /// <param name="context"></param> /// <returns>true 通過驗證</returns> private string loginValidate(HttpContext context) { string username = SysRequest.GetFormString("username"); string password = SysRequest.GetFormString("password"); string validateCode = SysRequest.GetFormString("validatecode"); if (context.Session[Keys.SESSION_CODE]==null) { return "驗證碼不存在,請切換驗證碼!"; } if (string.IsNullOrEmpty(username)) { return "請輸入使用者名稱"; } if (string.IsNullOrEmpty(password)) { return "請輸入密碼"; } if (string.IsNullOrEmpty(validateCode)) { return "請輸入驗證碼"; } if (validateCode.ToLower()!=context.Session[Keys.SESSION_CODE].ToString().ToLower()) { return "驗證碼不正確,請重新輸入"; } Dictionary<string, object> p = new Dictionary<string, object>(); p["LoginName"] = username; p["PassWord"] = Utils.Encrypt(password); P_manager item = SqlDbHelper.GetModel<P_manager>(p, SqlDbHelper.constr); if (item == null) { return "使用者名稱或密碼不正確,請重新輸入"; } context.Session[Keys.SESSION_ADMIN_INFO] = item; //寫入登入日誌 Model.siteconfig siteConfig = ConfigCRUD.loadConfig<siteconfig>(Utils.GetXmlMapPath(Keys.FILE_SITE_XML_CONFING)); if (siteConfig.logstatus == 1) { P_manager_log logitem = new P_manager_log(); logitem.user_id = item.id; logitem.user_name = item.LoginName; logitem.action_type = "login"; logitem.note = "使用者登入"; logitem.login_ip = SysRequest.GetIP(); logitem.login_time = DateTime.Now; SqlDbHelper.InsertModel<P_manager_log>(logitem, SqlDbHelper.constr); } if (item.RoleType > 1)//超級管理不判斷許可權 { string sql = "SELECT [ModuleName],[ModuleID],[FunctionDetails] FROM [p_FunctionModule_Role] where RoleID=" + item.RoleID; System.Data.DataTable dt = SqlDbHelper.SqlTextDataset(System.Data.CommandType.Text, sql, SqlDbHelper.constr).Tables[0]; if (dt.Rows.Count > 0) { string str = ""; for (int i = 0; i < dt.Rows.Count; i++) { if (i == dt.Rows.Count - 1) { str += dt.Rows[i]["ModuleName"].ToString() + ":" + dt.Rows[i]["ModuleID"].ToString() + ":" + dt.Rows[i]["FunctionDetails"].ToString(); } else { str += dt.Rows[i]["ModuleName"].ToString() + ":" + dt.Rows[i]["ModuleID"].ToString() + ":" + dt.Rows[i]["FunctionDetails"].ToString() + ","; } } context.Session["AdminRole"] = str; } } return "true"; }
提交成功後的loginController代碼如下:
[HttpPost] public ActionResult Login(FormCollection form) { string cbRememberId = Request.Form["cbRememberId"]; if (cbRememberId == "on") { Utils.WriteCookie("DTRememberName", form["username"], 14400); } else { Utils.WriteCookie("DTRememberName", form["username"], -14400); } return RedirectToAction("Index", "Home"); }
這裡放了一個checkbox 用於儲存使用者名稱的,然後提交到首頁的控制器,