Asp.net mvc asp.net mvc 3 a条件始终返回false

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;

我有一个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;
        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还是随用户返回
  • 如果用户返回-他们的密码属性值是多少
更新:来自评论

因为您使用nchar(15)作为数据库列类型,所以来自数据库的字符串将被额外的空格填充

您可以通过在返回密码时修剪密码来解决此问题,如下所示:

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))