asp.net mvc 3条件总是返回false

时间:2012-04-27 17:54:43

标签: asp.net-mvc asp.net-mvc-3

我有一个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)这个条件总是给出错误。请任何人帮助我。谢谢你提前..

1 个答案:

答案 0 :(得分:2)

您需要进行一些简单的调试。

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

更新:来自评论

因为您使用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;
    }
}
相关问题