2つのフィールドを比較するカスタムValidationAttributeを作成するにはどうすればよいですか?これは一般的な「パスワードの入力」、「パスワードの確認」のシナリオです。私は2つのフィールドが等しいことを確認し、物事を一貫させるために、DataAnnotationsを介して検証を実装したいと考えています。DataAnnotationsを使用して2つのモデルプロパティを比較する
だから、擬似コードで、私は次のようなものを実装する方法を探しています:
public class SignUpModel
{
[Required]
[Display(Name = "Password")]
public string Password { get; set; }
[Required]
[Display(Name = "Re-type Password")]
[Compare(CompareField = Password, ErrorMessage = "Passwords do not match")]
public string PasswordConfirm { get; set; }
}
public class CompareAttribute : ValidationAttribute
{
public CompareAttribute(object propertyToCompare)
{
// ??
}
public override bool IsValid(object value)
{
// ??
}
}
そこで問題は、どのように私はValidationAttributeを[比較]コーディングしますか?
あなた自身に第二の特性のために必要な属性を保存することができます。 –
C#6.0以降、プロパティ名として "magic strings"を使用する代わりに、 'nameof'キーワードを使用できるようになりました。これにより、強く型付けされたプロパティ名を使用しているので、関連するプロパティのリファクタリングがより簡単になります(魔法の文字列を更新するのを忘れてしまいます)。プラス、コンパイラはあなたが1つを見逃してしまった場合は何とかエラーになるので、 "絶対に"できなくなります。 @ Janxの回答ごとの使用例:[CompareAttribute(nameof(NewPassword)、ErrorMessage = "パスワードが一致しません。") ' –