2013-05-06 56 views
1

我試圖在MVC 4中使用Compare屬性來確保用戶在註冊期間輸入兩次相同的密碼。我正在使用Code First方法。我的示例模型如下。實現MVC中的[Compare(「password」)]屬性

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; } 
} 

唯一的問題是,生成的數據庫表將包含兩個密碼字段。有沒有一種聰明的方法來避免這個問題?

回答

2

假設您使用的是(您提到的是代碼優先,但沒有標記它),那麼您可以使用[NotMapped]來修飾屬性以告訴設計者不要添加該列。

但是,這是一個更好的想法使用單獨的模型爲數據庫和視圖,然後映射兩個用於演示或更新。

2

正確的做法是使用視圖模型,而不是將實體對象用作視圖模型。您絕不應該將實體模型綁定到View。只是說...

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; } 
}