1

私のクラスの1つに、次のような住所用の2つのフィールドがあります

public string Country { get; set; }
[Required(ErrorMessage = "Postcode is required")]
[RegularExpression(@"REGEX", 
ErrorMessage = "Please enter a valid UK Postcode)]
public string postcode { get; set;}

ただし、ユーザーが英国以外の国を選択した場合、郵便番号フィールドで少なくとも REGEX を無視し、理想的な世界では国に応じて別の REGEX を使用して検証する必要があります。モデル自体でこれが可能かどうかを誰かが提案できますか?

4

2 に答える 2

2

あなたはこれを行うことができますIValidatableObject

class MyClass : IValidatableObject {

   public string Country { get; set; }

   [Required(ErrorMessage = "Postcode is required")]
   public string postcode { get; set;}

   public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {

      if (!String.IsNullOrEmpty(Country) 
         && !String.IsNullOrEmpty(postcode)) {

         switch (Country.ToUpperInvariant()) { 
            case "UK":
               if (!Regex.IsMatch(postcode, "[regex]"))
                  yield return new ValidationResult("Invalid UK postcode.", new[] { "postcode" });
               break;

            default:
               break;
         }
      }
   }
}
于 2013-06-30T18:48:27.853 に答える
2

いくつかのオプションがあります。

  1. Requiredおよび属性を必要に応じて組み合わせた 100% カスタム検証属性を作成しRegularExpressionます。したがって、そのカスタム属性内で、必要なすべての検証を行い、値をCountryプロパティと比較して、必要に応じて RegEx を選択的に適用します。

  2. 関心のある国ごとに異なるpostcode属性を作成し、`RequiredIfAttribute ( RequiredIf 条件付き検証属性を参照) などを使用して、実際に必要な属性を判断します。その後、Javascript を使用して、適切な入力フィールドを表示/非表示にすることができます。

于 2013-06-30T18:47:39.993 に答える