2012-03-01 8 views
1

私のユーザーの編集では、パスワードと繰り返しパスワードが同じであることを確認する必要があります。私は "比較"バリデーターを見つけましたが、私はそれを動作させることはできません。Asp.Net MVC 3:サブプロパティのバリデータを比較しますか?

私のモデルは、次のようになります。

public class UserEditionViewModel{ 
    [Compare("User.Password")] 
    public String RepeatPassword{get;set;} 

    public User User {get;set;} 
    public List<Language> AvailableLanguages{get;set;} 
    public List<Country> AvailableCountries{get;set;} 
} 

とUserモデル:ビューで

public class User{ 
    [Required] 
    public String Name{get;set;} 

    //lot of other properties omitted... 

    [RegularExpression(@"(|.*(?=.{6,})(?=.*\d)(?=.*[a-zA-Z]).*)", ErrorMessageResourceType = typeof(LocalizationResources.Views.User.Edition), ErrorMessageResourceName = "InvalidPassword")] 
    //And I've localization attributes 
    public String Password{get;set;} 
} 

私だけのようなものがあります。

@Html.PasswordFor(m=>m.User.Password) 
@Html.PasswordFor(m=>m.RepeatPassword) 

をしかし、私が今まで取得2つの項目が一致していてもこのエラー:

'Password repeat' and 'User.Password' do not match. 

クライアントの検証中にこのエラーが発生しました。

私にとって、最も明白なエラーは、サブプロパティが見つからないということです。私は正しい?はいの場合、この動作を回避する方法。いいえ、問題は何ですか?

答えて

1

Userクラスを読み書きする別のプロパティをUserEditionViewModelに作成することで回避することができます。

public String UserPassword 
{ 
    get 
    { 
     return User.Password; 
    } 
    set 
    { 
     User.Password = value; 
    } 
} 

そして、代わりにそのプロパティに、あなたのコントロールをバインドし、[Compare("UserPassword")][Compare("User.Password")]を変更します。あなた自身のカスタムバリデーターを書いていないと他の方法でやることができないのかどうかは分かりません。

私は同様の問題を抱えていましたが、あなたの財産を取得するために継承の層を持つことができるので、驚くほど複雑になった独自のバリデーターを作成しました。別の解決方法がある場合、私はそれについても分かりました。あなたのプロジェクトであなたは私のために働いている、これを試すことができます

0

..

  1. - > References->右クリック - > NuGetパッケージの管理..

  2. DataAnnotationsExtensionsパッケージをインストールします。

  3. すると、次のようにモデルを検証する:

    パブリッククラスEmployee { [必須(にErrorMessage = "Nameフィールド必須")]

    public string name { get; set; } 
    [Required(ErrorMessage = "Name field Required")] 
    public string email { get; set; } 
    [Required(ErrorMessage = "Depatrment field Required")] 
    public string department { get; set; } 
    [Required(ErrorMessage = "Designation field Required")] 
    public string designation { get; set; } 
    public string phone { get; set; } 
    [Required(ErrorMessage = "Password field Required")] 
    [Display(Name="Password")] 
    public string password { get; set; } 
    [Required(ErrorMessage="Confirm password")] 
    [Display(Name="Re-type Password")] 
    [EqualToAttribute("password",ErrorMessage="Password miss-match")] 
    public string Re_Password { get; set; } 
    

    }

をだことそれ

関連する問題