登录和注册中的模型验证

时间:2013-10-20 17:57:41

标签: c# asp.net asp.net-mvc

我的用户模型如下所示:

public class User
{
    [Key]
    [Required]
    [StringLength(30, MinimumLength = 3)]
    [Display(Name = "Username")]
    public String Name { get; set; }

    [EmailAddress]
    [Required]
    [MaxLength(254)]
    [Display(Name="Email address")]
    public String Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [StringLength(20, MinimumLength = 6)]
    public String Password { get; set; }

休息是无关紧要的。

我遇到以下问题:当我尝试验证登录时,我需要输入一个电子邮件地址,因为[Required]ModelState.IsValid将返回false如果我不会登录逻辑将跳过...我无法删除[Required]因为我在注册时需要它,但我也想让用户只使用用户名登录。有没有办法只在注册时发送电子邮件?如果不是您建议我做的,请从电子邮件中删除要求?

登录:

if (ModelState.IsValid)
        {
            if (IsValid(user.Name, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.Name, false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", "Login Data is incorrect");
            }
        }

并注册:

if (ModelState.IsValid)
        {
            using (var db = new CardContext())
            {
                var crypto = new SimpleCrypto.PBKDF2();

                var encrPass = crypto.Compute(user.Password);

                var sysUser = db.Users.Create();

                sysUser.Avatar = null;
                sysUser.Banned = false;
                sysUser.Email = user.Email;
                sysUser.Information = "";
                sysUser.Name = user.Name;
                sysUser.Password = encrPass;
                sysUser.Rank = null;
                sysUser.Salt = crypto.Salt;

                db.Users.Add(sysUser);
                db.SaveChanges();

                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "Registration data is incorrect.");
        }

1 个答案:

答案 0 :(得分:2)

我建议使用两个单独的 View Models -

  • 需要电子邮件的注册视图模型
  • 用于登录但不需要电子邮件的视图模型。

它们是视图模型,它们有两个不同的用途,所以虽然它看起来像重复,但我认为它不是。