我有一个UserManager Model.it看起来像:
public class UserManager
{
private ToLetDBEntities TLE = new ToLetDBEntities();
public string GetUserPassword(string usermail)
{
var user = from o in TLE.users where o.email_add == usermail select o;
if (user.ToList().Count > 0)
{
return user.First().password;
}
else
return string.Empty;
}
}
我有一个AccountController,如:
public class AccountController : Controller
{
[HttpPost]
public ActionResult LogOn(UserLogOn model)
{
if (ModelState.IsValid)
{
UserManager um = new UserManager();
string pass = um.GetUserPassword(model.email_add);
if (model.password==pass)
{
FormsAuthentication.SetAuthCookie(model.email_add, false);
return RedirectToAction("Welcome", "Home");
}
else
{
ModelState.AddModelError("", "The provided password is incorrect.");
}
}
return View(model);
}
}
我有一个UserLogon模型包含(email_add,密码)。当我运行此控制器时,它总是给我“提供的密码不正确”错误消息。 if(model.password == pass)这个条件总是给出错误。请任何人帮助我。谢谢你提前..
答案 0 :(得分:2)
您需要进行一些简单的调试。
即
更新:来自评论
因为您使用nchar(15)作为数据库列类型,所以来自数据库的字符串将使用额外的空格填充。
您可以在返回时修改密码来解决问题 - 如下所示:
return user.First().password.Trim();
但更好的解决方法是将nvarchar用于数据库列类型,然后就不会出现空白填充问题。
BONUS:在GetUserPassword方法中,您要枚举user
IQueryable集合两次 - 这将导致两次数据库调用。
将其更改为类似的内容以避免这种情况:
public class UserManager
{
private ToLetDBEntities TLE = new ToLetDBEntities();
public string GetUserPassword(string usermail)
{
var user = TLE.users.FirstOrDefault(x => x.email_add == usermail);
if (user != null)
{
return user.password;
}
else
return string.Empty;
}
}