近期项目使用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表单中需要写明οnsubmit="return loginValidate()" 或者submit按钮提交时 οnclick="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 用于保存用户名的,然后提交到主页的控制器,