1

我正在尝试使用CompareMVC 4 中的属性来确保用户在注册期间输入相同的密码两次。我正在使用代码优先方法。我的示例模型如下。

public class Registration
{
    public int RegistrationId { get; set; }
    [Required]
    [StringLength(16, MinimumLength = 6)]
    [Display(Name = "Username")]
    [Remote("CheckUserName", "Home", ErrorMessage="Username is taken.")]
    public string UserName { get; set; }
    [Required]
    [StringLength(100)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Compare("Password")]
    public string PasswordConfirm { get; set; }
}

唯一的问题是生成的数据库表将包含两个密码字段。有没有聪明的方法来避免这个问题?

4

2 回答 2

4

正确的方法是使用视图模型而不是使用您的实体对象作为视图模型。您永远不应该将实体模型绑定到视图。只是说...

public class RegistrationViewModel
{
    public int RegistrationId { get; set; }
    [Required]
    [StringLength(16, MinimumLength = 6)]
    [Display(Name = "Username")]
    [Remote("CheckUserName", "Home", ErrorMessage="Username is taken.")]
    public string UserName { get; set; }
    [Required]
    [StringLength(100)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Compare("Password")]
    public string PasswordConfirm { get; set; }
}

public class Registration
{
    public int RegistrationId { get; set; }        
    public string UserName { get; set; }
    public string Password { get; set; }
}
于 2014-10-16T20:19:03.770 回答
4

假设您使用(您首先提到了代码但没有标记它),您可以使用来装饰属性[NotMapped]以告诉设计人员不要添加该列。

但是,最好为数据库和视图使用单独的模型,然后将两者映射以进行演示或更新。

于 2013-05-06T20:56:22.043 回答