-1

我有一个 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;
    }
}

我有一个 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) 这个条件总是给出假的。请任何人帮助我。在此先感谢..

4

1 回答 1

2

你需要做一些简单的调试。

IE

  • 在 GetUserPassword 中,user == null 还是与用户一起返回?
  • 如果用户回来 - 他们的密码属性值是多少?

更新:来自评论

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

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

return user.First().password.Trim();

但更好的解决方法是使用 nvarchar 作为数据库列类型,这样就不会出现空白填充问题。

奖励:在 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;
    }
}
于 2012-04-27T18:03:31.387 回答