public ActionResult LogIn()
{
return View();
}
[HttpPost]
public ActionResult LogIn(UserLogins p, UserRecipe u)
{
////var s = context.plate.FirstOrDefault( x => x.Email.Equals(p.Email) && x.Password.Equals(p.Password));
var details = (from userlist in context.plate
where userlist.Email == p.Email && userlist.Password == p.Password
select new
{
userlist.UserID,
userlist.Name,
userlist.Email
});
if (details != null)
{
// Session["User"] = s;
Session["User"] = p.Email;
Session["Name"] = details.FirstOrDefault().Name;
Session["UserId"] = details.FirstOrDefault().UserID;
u.UserId = Convert.ToInt32(Session["UserId"]);
context.SaveChanges();
TempData["Added"] = "You are successfully Logged in";
return RedirectToAction("ShowProducts");
}
else
{
TempData["Added"] = "Invalid Username or password";
return RedirectToAction("LogIn");
}
}
这是我的代码,当我输入错误的数据时,我得到一个空引用异常。当我输入正确的数据时它工作正常。会话 ["UserId"] 上出现空引用异常。
您有下面的查询,它永远不会为空。如果在数据库中未找到任何内容,它将返回空列表。
var details = (from userlist in context.plate
where userlist.Email == p.Email && userlist.Password == p.Password
select new
{
userlist.UserID,
userlist.Name,
userlist.Email
});
因此,当您检查时if details != null
,它将返回 true,因为它不为 null。然而它是空的。因此,当您这样做时:
if (details != null)
{
Session["Name"] = details.FirstOrDefault().Name;
}
由于details
是空的,因此本质FirstOrDefault
上将返回null
您正在执行此操作:null.Name
这就是您收到空引用异常的原因。
使固定
在数据库中搜索目标用户,如果没有找到,请立即离开。如果找到,请执行以下操作:
var target = context.plate.FirstOrDefault(x => x.Email == p.Email && x.Password == p.Password);
if (target == null)
{
TempData["Added"] = "Invalid Username or password";
return RedirectToAction("LogIn");
}
// success
Session["User"] = p.Email;
Session["Name"] = target.Name;
Session["UserId"] = target.UserID;
u.UserId = Convert.ToInt32(Session["UserId"]);
context.SaveChanges();
TempData["Added"] = "You are successfully Logged in";
return RedirectToAction("ShowProducts");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句