管理員模塊:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; using DIDAO.BLL; using DIDAO.Common; using DIDAO.Model; namespace DIDAO.Admin.Admin { /// <summary> /// AdminController 的摘要說明 /// </summary> public class AdminController : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; MyORM_BLL myORM_BLL = new MyORM_BLL(); string btnSave = context.Request["btnSave"]; string action = context.Request["action"]; if (string.IsNullOrWhiteSpace(btnSave)) { if (action == "list") //列表 { List<object> list = myORM_BLL.SelectModelByField(typeof(TD_ADMIN), "STATUS=1"); //查詢正常的管理員 RazorHelper.RazorParse(context, "~/Admin/AdminList.cshtml", list); } else if (action == "addnew") //新增展示 { TD_ADMIN admin = new TD_ADMIN(); RazorHelper.RazorParse(context, "~/Admin/AdminAlter.cshtml", new { action = "addnew", admin = admin }); } else if (action == "edit") //編輯展示 { #region 編輯展示 string idStr = context.Request["id"]; int id = VolidHelper.CheckStrToInt(idStr); object obj = myORM_BLL.SelectModelById(typeof(TD_ADMIN), id); if (obj == null) { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未找到用戶:" + id }); //出錯 return; } TD_ADMIN admin = obj as TD_ADMIN; RazorHelper.RazorParse(context, "~/Admin/AdminAlter.cshtml", new { action="edit",admin=admin}); #endregion } else if (action == "delete") //刪除 { #region 刪除 string idStr = context.Request["id"]; int id = VolidHelper.CheckStrToInt(idStr); bool flag = myORM_BLL.DeleteOrDisableModelByUpdateStatus(typeof(TD_ADMIN),2, id); //status=2 if (flag) { context.Response.Redirect("/Admin/AdminController.ashx?action=list"); } else { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "刪除操作失敗:"+id }); //出錯 } #endregion } else if (action == "batchDelete") //批量刪除 { string idStr = context.Request["idStr"].Trim(','); if (!VolidHelper.CheckStringIsAllInt(idStr)) //判斷idStr是否每一項都是數字 { AjaxHelper.WriteJson(context, "error", "批量禁用失敗:id字符串中含有非數字"); } bool flag = myORM_BLL.DeleteOrDiableModelByIdList(typeof(TD_ADMIN), 2, idStr); if (!flag) { AjaxHelper.WriteJson(context, "error", "批量禁用失敗"); } AjaxHelper.WriteJson(context, "ok", "成功"); } else if (action == "disable") //禁用 { #region 禁用 string idStr = context.Request["id"]; int id = VolidHelper.CheckStrToInt(idStr); bool flag = myORM_BLL.DeleteOrDisableModelByUpdateStatus(typeof(TD_ADMIN), 3, id); //status=3 if (flag) { context.Response.Redirect("/Admin/AdminController.ashx?action=list"); } else { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "禁用操作失敗:" + id }); //出錯 } #endregion } else { throw new Exception("action錯誤:" + action); } } else //保存 { string USERNAME = context.Request["USERNAME"]; string PASSWORD = context.Request["PASSWORD"]; string RePASSWORD = context.Request["RePASSWORD"]; string REALNAME = context.Request["REALNAME"]; string MOBILE = context.Request["MOBILE"]; string EMAIL = context.Request["EMAIL"]; string IDCARD = context.Request["IDCARD"]; string ADDRESS = context.Request["ADDRESS"]; #region 驗證 非空,長度,是否符合格式 //驗證 非空,長度,是否符合格式 if (string.IsNullOrWhiteSpace(USERNAME) || USERNAME.Length < 3) { AjaxHelper.WriteJson(context, "error", "用戶名至少3位"); return; } if (string.IsNullOrWhiteSpace(PASSWORD) || PASSWORD.Length < 6) { AjaxHelper.WriteJson(context, "error", "密碼至少6位"); return; } if (string.IsNullOrWhiteSpace(RePASSWORD) || RePASSWORD != PASSWORD) { AjaxHelper.WriteJson(context, "error", "密碼不一致"); return; } if (string.IsNullOrWhiteSpace(REALNAME) || REALNAME.Length < 2) { AjaxHelper.WriteJson(context, "error", "必須是真是姓名"); return; } if (string.IsNullOrWhiteSpace(MOBILE) || MOBILE.Length != 11) { AjaxHelper.WriteJson(context, "error", "手機號不正確"); return; } if (string.IsNullOrWhiteSpace(EMAIL) || EMAIL.Length < 5) { AjaxHelper.WriteJson(context, "error", "郵箱不正確"); return; } if (string.IsNullOrWhiteSpace(IDCARD) || IDCARD.Length != 18) { AjaxHelper.WriteJson(context, "error", "身份證不正確"); return; } #endregion TD_ADMIN admin = new TD_ADMIN(); admin.ADDRESS = ADDRESS; admin.DELETEBY = null; admin.DELETEDATE = null; admin.EMAIL = EMAIL; admin.IDCARD = IDCARD; admin.MOBILE = MOBILE; admin.PASSWORD = CommonHelper.Md5Encode(PASSWORD); admin.REALNAME = REALNAME; admin.STATUS = 1; admin.USERNAME = USERNAME; if (action == "addnew") //新增保存 { #region 新增保存 admin.INSERTBY = 1; //當前用戶id admin.INSERTDATE = DateTime.Now; admin.LASTEDITBY = null; admin.LASTEDITDATE = null; bool flag = myORM_BLL.InsertModel(admin, "SE_TD_ADMIN"); if (flag) { AjaxHelper.WriteJson(context, "ok", "新增成功"); } else { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "新增失敗:" + USERNAME }); //出錯 } #endregion } else if (action == "edit") //編輯保存 { #region 編輯保存 string idStr = context.Request["id"]; int id = VolidHelper.CheckStrToInt(idStr); //根據Id獲得實例 object obj = myORM_BLL.SelectModelById(typeof(TD_ADMIN), id); if (obj == null) { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "未找到用戶:" + id }); //出錯 return; } admin.ID = id; TD_ADMIN adm = obj as TD_ADMIN; admin.INSERTBY = adm.INSERTBY; admin.INSERTDATE = adm.INSERTDATE; admin.LASTEDITBY = 1; admin.LASTEDITDATE = DateTime.Now; bool flag = myORM_BLL.UpdateModel(admin); if (flag) { AjaxHelper.WriteJson(context, "ok", "編輯成功"); } else { RazorHelper.RazorParse(context, "~/error.cshtml", new { Msg = "編輯失敗:" + USERNAME }); //出錯 } #endregion } else { throw new Exception("action錯誤:" + action); } } } public bool IsReusable { get { return false; } } } }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="/js/jquery-1.4.2.min.js"></script> <script src="../js/myjs/mapArrayElement.js"></script> <script type="text/javascript"> $(function () { $('#btnBatchDelete').click(function () { var arrs = $(':checkbox[name="chkIds"]:checked'); //數組元素 //var ids = arrs.map(function () { //值的數組 // return $(this).val(); //}); //var idStr = ""; //for (var i = 0; i < ids.length; i++) { // idStr += ids[i]+','; //} //idStr = idStr.trim(','); var idStr = mapArrayElement(arrs); $.ajax({ type: 'post', dataType:'json', url: '/Admin/AdminController.ashx?', data: { action: "batchDelete", idStr: idStr }, success: function (data) { if (data.status == 'error') { $('#spMsg').text(data.msg); } else if (data.status == 'ok') { window.location.href = '/Admin/AdminController.ashx?action=list'; } else { alert('服務器錯誤:'+data.status); } }, error: function () { alert('服務器錯誤'); } }); }); }) </script> </head> <body> <div> <a href="AdminController.ashx?action=addnew">新增</a> <table> <thead> <tr><th>用戶名</th><th>真實姓名</th><th>手機</th><th>郵箱</th><th>身份證</th><th>地址</th><th></th><th></th></tr> </thead> <tbody> @foreach(object obj in Model){ DIDAO.Model.TD_ADMIN admin = obj as DIDAO.Model.TD_ADMIN; <tr> <td><input type="checkbox" name="chkIds" value="@admin.ID" /></td> <td>@admin.USERNAME</td><td>@admin.REALNAME</td><td>@admin.MOBILE</td><td>@admin.EMAIL</td><td>@admin.IDCARD</td><td>@admin.ADDRESS</td> <td><a href="AdminController.ashx?action=edit&id=@admin.ID">編輯</a></td> <td><a href="AdminController.ashx?action=delete&id=@admin.ID" onclick="return confirm('您確定要刪除嗎?')">刪除</a></td> <td><a href="AdminController.ashx?action=disable&id=@admin.ID" onclick="return confirm('您確定要禁用嗎?')">禁用</a></td> </tr> } </tbody> <tfoot> <tr><td><input type="button" id="btnBatchDelete" value="批量刪除" /></td><td><span id="spMsg"></span></td></tr> </tfoot> </table> </div> </body> </html>
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="/js/jquery-1.4.2.min.js"></script> <script type="text/javascript"> $(function () { $('#btnSave').click(function () { var action = $('#action').val().trim(); var id = $('#id').val().trim(); var USERNAME = $('#USERNAME').val().trim(); var PASSWORD = $('#PASSWORD').val().trim(); var RePASSWORD = $('#RePASSWORD').val().trim(); var REALNAME = $('#REALNAME').val().trim(); var MOBILE = $('#MOBILE').val().trim(); var EMAIL = $('#EMAIL').val().trim(); var IDCARD = $('#IDCARD').val().trim(); var ADDRESS = $('#ADDRESS').val().trim(); //驗證 非空,長度,是否符合格式 $('#USERNAME').blur(function () { if (USERNAME.length < 3) { $('#spUSERNAME').text('用戶名須不少於3個字符'); return; } $('#spUSERNAME').text(''); }); $('#PASSWORD').blur(function () { if (PASSWORD.length < 6) { $('#spPASSWORD').text('密碼須不少於6個字符'); return; } $('#spPASSWORD').text(''); }); $('#RePASSWORD').blur(function () { if (RePASSWORD != PASSWORD) { $('#spRePASSWORD').text('兩次密碼不一致'); return; } $('#spRePASSWORD').text(''); }); $('#REALNAME').blur(function () { if (REALNAME.length < 2) { $('#spREALNAME').text('真實姓名必須填寫'); return; } $('#spREALNAME').text(''); }); $('#MOBILE').blur(function () { if (MOBILE.length != 11) { $('#spMOBILEE').text('手機號必須是11位'); return; } $('#spMOBILEE').text(''); }); $('#EMAIL').blur(function () { if (EMAIL.length < 5) { $('#spEMAIL').text('郵箱必須填寫'); return; } $('#spEMAIL').text(''); }); $('#IDCARD').blur(function () { if (IDCARD.length != 18) { $('#spIDCARD').text('身份證必須18位'); return; } $('#spIDCARD').text(''); }); var btnSave = $('#btnSave').val(); $.ajax({ type: 'post', dataType: 'json', url: '/Admin/AdminController.ashx', data: { action:action,id:id, USERNAME: USERNAME, PASSWORD: PASSWORD, RePASSWORD: RePASSWORD, REALNAME: REALNAME, MOBILE: MOBILE, EMAIL: EMAIL, IDCARD: IDCARD, ADDRESS: ADDRESS, btnSave: btnSave }, success: function (data) { if (data.status == 'error') { $('#spMsg').text(data.msg); } else if (data.status == 'ok') { window.location.href = '/Admin/AdminController.ashx?action=list'; } else { alert('服務器錯誤:'+data.status); } }, error: function () { alert('服務器錯誤'); } }); }); }) </script> </head> <body> <div> <form id="form1"> <table> <tr><td></td><td><input type="hidden" id="action" value="@Model.action" /></td></tr> <tr><td></td><td><input type="hidden" id="id" value="@Model.admin.ID" /></td></tr> <tr><td>用戶名</td><td><input type="text" id="USERNAME" value="@Model.admin.USERNAME" /></td><td><span id="spUSERNAME"></span></td></tr> <tr><td>密碼</td><td><input type="password" id="PASSWORD" /></td><td><span id="spPASSWORD"></span></td></tr> <tr><td>重復密碼</td><td><input type="password" id="RePASSWORD" /></td><td><span id="spRePASSWORD"></span></td></tr> <tr><td>真實姓名</td><td><input type="text" id="REALNAME" value="@Model.admin.REALNAME" /></td><td><span id="spREALNAME"></span></td></tr> <tr><td>手機</td><td><input type="text" id="MOBILE" value="@Model.admin.MOBILE" /></td><td><span id="spMOBILE"></span></td></tr> <tr><td>郵箱</td><td><input type="text" id="EMAIL" value="@Model.admin.EMAIL" /></td><td><span id="spEMAIL"></span></td></tr> <tr><td>身份證</td><td><input type="text" id="IDCARD" value="@Model.admin.IDCARD" /></td><td><span id="spIDCARD"></span></td></tr> <tr><td>地址</td><td><input type="text" id="ADDRESS" value="@Model.admin.ADDRESS" /></td></tr> <tr><td><input type="button" id="btnSave" value="保存" /></td><td><span id="spMsg"></span></td></tr> </table> </form> </div> </body> </html>
登錄模塊:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.SessionState; using DIDAO.Admin.Common; using DIDAO.BLL; using DIDAO.Common; using DIDAO.Model; namespace DIDAO.Admin.Login { /// <summary> /// LoginController 的摘要說明 /// </summary> public class LoginController : IHttpHandler,IRequiresSessionState { MyORM_BLL myORM_BLL = new MyORM_BLL(); public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; string action = context.Request["action"]; if(action=="index") //登錄展示 { #region 登錄展示 //看看 是否自動登錄,是的話自動登錄,否則繼續 //看看 是否記住密碼,是的話填充,否則繼續 string username, password; ConstStringHelper.AutoLoginResult autoLoginResult = LoginHelper.TryAutoLoginOrMemoryPwd(context, out username, out password); switch (autoLoginResult) { case ConstStringHelper.AutoLoginResult.AutoLogin: context.Response.Redirect("/index.html"); break; case ConstStringHelper.AutoLoginResult.MemoryPwd: RazorHelper.RazorParse(context, "~/Login/Login.cshtml", new { username = username, password = password }); break; case ConstStringHelper.AutoLoginResult.NO: RazorHelper.RazorParse(context, "~/Login/Login.cshtml", new { username = "", password = "" }); break; default: throw new Exception("服務器錯誤:未知的" + autoLoginResult); } #endregion } else if (action == "login") //登錄 { #region 登錄 //獲得請求 string username = context.Request["username"]; string password = context.Request["password"]; string validCode = context.Request["validCode"]; string chkMemoryPwd = context.Request["chkMemoryPwd"]; string chkAutoLogin = context.Request["chkAutoLogin"]; //驗證 非空及驗證碼 #region 驗證 非空 if (string.IsNullOrWhiteSpace(username) || username.Length < 3) { AjaxHelper.WriteJson(context, "error", "用戶名長度要大於3個字符"); return; } if (string.IsNullOrWhiteSpace(password) || password.Length < 6) { AjaxHelper.WriteJson(context, "error", "密碼長度要大於6個字符"); return; } if (string.IsNullOrWhiteSpace(validCode) || validCode.Length != 4) { AjaxHelper.WriteJson(context, "error", "驗證碼必須是4個字符"); return; } #endregion if (!LoginHelper.CheckValidCode(context, validCode)) { GenerateValidCode.ReGenerateValidCode(context); //避免用戶修改驗證碼id 使驗證碼不發生變化也可以登錄,正常情況使用不到 AjaxHelper.WriteJson(context, "error", "驗證碼錯誤"); return; } //驗證 用戶及密碼 if (!CommonHelper.CheckStringIsSpecialChar(username)) { AjaxHelper.WriteJson(context, "error", "用戶名中含有特殊字符"); return; } ConstStringHelper.LoginResult result = LoginHelper.CheckLoginStatus(context, username, password); if (result == ConstStringHelper.LoginResult.UserNameNotExist) { AjaxHelper.WriteJson(context, "error", "用戶名不存在"); return; } else if (result == ConstStringHelper.LoginResult.PasswordError) { AjaxHelper.WriteJson(context, "error", "密碼錯誤"); return; } else if (result == ConstStringHelper.LoginResult.OK) //成功 { if (chkMemoryPwd == "true" || chkAutoLogin == "true") { //存入cookie LoginHelper.StoreCookie(context, chkMemoryPwd, chkAutoLogin, username, password); } AjaxHelper.WriteJson(context, "ok", "登錄成功"); return; } else { throw new Exception("不存在這樣的枚舉結果:ConstStringHelper.LoginResult:" + result); } #endregion } else if(action=="loginout") //登錄退出 { #region 登錄退出 //只將session釋放 context.Session.Abandon(); #endregion } else if(action=="exit") //完全退出 { #region 完全退出 //取消會話 context.Session.Abandon(); //消除cookie HttpCookie chkMemoryPwd = context.Request.Cookies[ConstStringHelper.ADMINCOOKIE_CHKMEMORYPWD]; if (chkMemoryPwd != null) { chkMemoryPwd.Expires.AddDays(-1); } HttpCookie chkAutoLogin = context.Request.Cookies[ConstStringHelper.ADMINCOOKIE_CHKAUTOLOGIN]; if (chkAutoLogin != null) { chkAutoLogin.Expires.AddDays(-1); } HttpCookie username = context.Request.Cookies[ConstStringHelper.ADMINCOOKIE_USERNAME]; if (username != null) { username.Expires.AddDays(-1); } HttpCookie password = context.Request.Cookies[ConstStringHelper.ADMINCOOKIE_PASSWORD]; if (password != null) { password.Expires.AddDays(-1); } #endregion } else { throw new Exception("action錯誤:"+action); } } public bool IsReusable { get { return false; } } } }
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Web; using System.Web.SessionState; using DIDAO.Common; namespace DIDAO.Admin.Login { /// <summary> /// GenerateValidCode 的摘要說明 /// </summary> public class GenerateValidCode : IHttpHandler, IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; string code = ReGenerateValidCode(context); Random ran = new Random(); //畫圖 using(Bitmap bmp=new Bitmap(70,30)) { using(Graphics g=Graphics.FromImage(bmp)) using(Font font=new Font(new FontFamily("微軟雅黑"),13)) { g.DrawString(code, font, Brushes.White, new PointF(0, 0)); for (int i = 0; i < 100;i++ ) //畫100個點 { int x = ran.Next(0, 65); int y = ran.Next(0, 30); g.DrawLine(Pens.White, new PointF(x, y), new PointF(x, y)); } } bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg); } } /// <summary> /// 重復產生驗證碼 /// </summary> /// <param name="context"></param> /// <returns>驗證碼</returns> public static string ReGenerateValidCode(HttpContext context) { //常用漢字 string cc = @"壽弄麥形進戒吞遠違運扶撫壇技壞擾拒找批扯址走抄壩貢攻赤折抓扮搶孝均拋投墳坑抗坊抖護殼志塊扭聲把報卻劫芽花芹芬蒼芳嚴蘆勞克蘇桿杜杠材村杏極李楊求更束豆兩麗醫辰勵否還殲來連步堅旱盯呈時吳助縣里呆園曠圍呀噸足郵男困吵串員聽吩吹嗚吼吧別崗帳財釘針告我亂利禿秀私每兵估體何但伸作伯伶佣低你住位伴身皂佛近徹役返余希坐谷妥含鄰岔肝肚腸龜免狂猶角刪條卵島迎飯飲系言凍狀畝況床庫療應冷這序辛棄冶忘閑間悶判灶燦弟汪沙汽沃泛溝沒沈沉懷憂快完宋宏牢究窮災良證啟評補初社識訴診詞譯君靈即層尿尾遲局改張忌際陸阿陳阻附妙妖妨努忍勁雞驅純紗綱納縱駁紛紙紋紡驢紐"; Random ran = new Random(); string str = ""; for (int i = 0; i < 4; i++) { int index = ran.Next(0, cc.Length); str += cc[index]; } context.Session[ConstStringHelper. ADMINSESSION_VALIDCODE] = str; return str; } public bool IsReusable { get { return false; } } } }
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script src="/js/jquery-1.4.2.min.js"></script> <script type="text/javascript"> $(function () { //刷新驗證碼 function refreshValidCode() { $('#imgValidCode').attr('src', 'GenerateValidCode.ashx?' + new Date()); } //刷新驗證碼 $('#imgValidCode').click(function () { refreshValidCode(); }); $('#btnLogin').click(function () { var username = $('#username').val().trim(); var password = $('#password').val().trim(); var validCode = $('#validCode').val().trim(); var chkMemoryPwd = $('#chkMemoryPwd').attr('checked'); var chkAutoLogin = $('#chkAutoLogin').attr('checked'); //驗證 非空、長度、格式等 $('#username').blur(function () { if ($(this).val().length < 3) { $('#spusername').text('用戶名長度要大於3個字符'); refreshValidCode(); } $('#spusername').text(''); }); $('#password').blur(function () { if ($(this).val().length < 6) { $('#sppassword').text('密碼長度要大於6個字符'); refreshValidCode(); } $('#sppassword').text(''); }); $('#validCode').blur(function () { if ($(this).val().length !=4) { $('#spvalidCode').text('驗證碼必須是4個字符'); refreshValidCode(); } $('#spvalidCode').text(''); }); $.ajax({ type: 'post', dataType: 'json', url: '/Login/LoginController.ashx', data: { username: username, password: password, validCode: validCode, chkMemoryPwd: chkMemoryPwd, chkAutoLogin: chkAutoLogin, action: "login" }, success: function (data) { if (data.status == 'error') { $('#spMsg').text(data.msg); refreshValidCode(); } else if (data.status == 'ok') { window.location.href = '/index.html'; } else { alert('服務器錯誤:' + data.status); refreshValidCode(); } }, error: function () { alert('服務器錯誤'); } }); }); }) </script> </head> <body> <div> <table> <tr><td>用戶名</td><td><input type="text" id="username" value="@Model.username" /></td><td><span id="spusername"></span></td></tr> <tr><td>密碼</td><td><input type="password" id="password" value="@Model.password" /></td><td><span id="sppassword"></span></td></tr> <tr><td><img id="imgValidCode" src="GenerateValidCode.ashx" /></td><td><input type="text" id="validCode" /></td><td><span id="spvalidCode"></span></td></tr> <tr><td><input type="checkbox" id="chkMemoryPwd" />記住密碼</td><td><input type="checkbox" id="chkAutoLogin" /><label for="chkAutoLogin">自動登錄</label></td></tr> <tr><td></td><td><input type="button" id="btnLogin" value="登錄" /></td><td><span id="spMsg"></span></td></tr> </table> </div> </body> </html>
