Asp.net mvc asp.net mvc 3 a条件始终返回false
我有一个UserManager模型。它看起来像:Asp.net mvc asp.net mvc 3 a条件始终返回false,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我有一个UserManager模型。它看起来像: 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;
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;
}
}
我有一个会计控制员,比如:
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\u add,密码)。当我运行此控制器时,它总是给我“提供的密码不正确”错误消息。如果(model.password==pass),则此条件始终为false。请任何人帮助我。提前谢谢 您需要进行一些简单的调试 即
- 在GetUserPassword中,user==null还是随用户返回
- 如果用户返回-他们的密码属性值是多少
return user.First().password.Trim();
但是更好的修复方法是对数据库列类型使用nvarchar,这样就不会出现空白填充问题
另外:在GetUserPassword方法中,您将枚举user
IQueryable集合两次-这将导致两次DB调用
将其更改为类似以下内容以避免:
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;
}
}
GetUserPassword()中存储的密码是散列的还是加密的?您需要进行一些简单的调试。。。i、 在GetUserPassword中,user==null还是返回一个用户。。。如果用户返回-他的密码属性值是多少?密码只是数据库中的nchar类型。我已检查返回的密码是否不为null或空。SQL Server中的nchar字段已填充。@Tuan,对不起,我不理解填充的密码!我也在UserManager中尝试了这个方法:
string pass=um.GetUserPassword(model.email\u add);如果(pass==null | | | pass.Length==0){return RedirectToAction(“Welcome”,“Home”);}
则会给出相同的错误。请参阅我的更新。另外,您可以使用if(string.IsNullOrWhitespace(pass))