Jquery 若数据库中存在记录,则执行该条件
我的SQL Server数据库中有一个包含列的表Jquery 若数据库中存在记录,则执行该条件,jquery,ajax,asp.net-mvc,entity-framework,Jquery,Ajax,Asp.net Mvc,Entity Framework,我的SQL Server数据库中有一个包含列的表 loginID, loginUser, loginPassword 使用实体框架,我想检查给定的记录是否存在。我正在使用ASP.NETMVC和AJAX将数据发送到我的控制器方法 $("#loginBtn").click(function () { var loginUserRequest = $("#email").val(); var loginPassRequest = $("#pwd").val(); var l
loginID, loginUser, loginPassword
使用实体框架,我想检查给定的记录是否存在。我正在使用ASP.NETMVC和AJAX将数据发送到我的控制器方法
$("#loginBtn").click(function () {
var loginUserRequest = $("#email").val();
var loginPassRequest = $("#pwd").val();
var loginTheUser = {
loginID: 1,
loginUser: loginUserRequest,
loginPassword: loginPassRequest
}
$.ajax({
type: "POST",
url: "Home/LoginUser",
data: loginTheUser
});
});
用户名:
密码:
提交
我假设问题是您的返回视图
和重定向到操作
不工作?在没有正确处理返回到Ajax调用的结果的情况下进行Ajax调用
试试这样的我没有测试它,你可能不得不玩弄它
[HttpPost]
public ActionResult LoginUser(loginTable loginData)
{
WebEntities entit = new WebEntities();
var context = entit.loginTables.FirstOrDefault(lu => lu.loginUser == loginData.loginUser && lu.loginPassword == loginData.loginPassword);
if (context == null)
{
return new HttpStatusCodeResult(401, "Unauthorized!");
}
else
{
var url = Url.Action("Contact", "Home")
return Json(url);
}
}
$.ajax({
type: "POST",
url: "Home/LoginUser",
data: loginTheUser,
success: function(response){
window.location.replace(response);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
最好的方法是确保充分利用ajax。从控制器返回json结果,以便轻松显示任何形式的消息。下面是你可以做的,以获得最好的。 首先,修改javascript代码,如下所示:
$("#loginBtn").click(function () {
var loginUserRequest = $("#email").val();
var loginPassRequest = $("#pwd").val();
var loginTheUser = {
loginID: 1,
loginUser: loginUserRequest,
loginPassword: loginPassRequest
};
$.when(loginUser(loginTheUser, "/Home/LoginUser")).done(function (response) {
if (response.error == true) {
alert(response.message);
} else {
window.location.href = '/home/contact';
}
}).fail(function (err) {
console.log(err);
});
});
从ajax响应中可以看到,我正在检查response.error是否为true,也就是说,我需要从控制器发送response.error。以下是修改后的控制器操作方法:
[HttpPost]
public ActionResult LoginUser(loginTable loginData)
{
WebEntities entit = new WebEntities();
var context = entit.loginTables.Any(lu => lu.loginUser == loginData.loginUser && lu.loginPassword == loginData.loginPassword);
if (!context)
{
return Json(new { error = true, message = "This user does not exist" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new
{
error = false
}, JsonRequestBehavior.AllowGet);
}
}
我希望这能有所帮助。一般来说,不要在数据库中以明文形式存储密码。对它们进行散列,然后对收到的密码进行散列并比较散列。谷歌关于在数据库中存储带有salt的密码。你实际上想知道该记录是否存在(是/否问题)。因此,您的查询应该是
entit.loginTables.Any(lu=>lu.loginUser==loginda.loginUser&&lu.loginPassword==loginda.loginPassword)
。这样效率更高。再一次,检查散列。那么,问题是什么?是的,知道散列只是作为一个测试,谢谢你。问题是,如果使用实体存在记录,那么请执行重定向等条件,例如。
$("#loginBtn").click(function () {
var loginUserRequest = $("#email").val();
var loginPassRequest = $("#pwd").val();
var loginTheUser = {
loginID: 1,
loginUser: loginUserRequest,
loginPassword: loginPassRequest
};
$.when(loginUser(loginTheUser, "/Home/LoginUser")).done(function (response) {
if (response.error == true) {
alert(response.message);
} else {
window.location.href = '/home/contact';
}
}).fail(function (err) {
console.log(err);
});
});
[HttpPost]
public ActionResult LoginUser(loginTable loginData)
{
WebEntities entit = new WebEntities();
var context = entit.loginTables.Any(lu => lu.loginUser == loginData.loginUser && lu.loginPassword == loginData.loginPassword);
if (!context)
{
return Json(new { error = true, message = "This user does not exist" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new
{
error = false
}, JsonRequestBehavior.AllowGet);
}
}