9

Personと のクラスがあるFirstNameとしましょうLastName。ユーザーが UI に 2 つの値の少なくとも 1 つを入力する必要があることを望みますが、それぞれを入力する必要はないかもしれません。

それぞれにRequired属性/データ注釈を配置すると、両方が必要になります。

このルールのサーバー側の検証 (クライアント側の検証も) を行うにはどうすればよいですか?

4

1 に答える 1

15

これにはカスタム属性を使用できます。つまり、カスタム属性は両方の値を取得し、少なくとも 1 つに値があることを確認します。詳細については、このページを参照してください。以下に例を示します (テストされていないコード)。

[AttributeUsage(AttributeTargets.Property, AllowMultiple =false, Inherited = false)]
  public class ValidatePersonName: ValidationAttribute
  {
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
      string FirstName = (string)validationContext.ObjectType.GetProperty("FirstName").GetValue(validationContext.ObjectInstance, null);

      string LastName = (string)validationContext.ObjectType.GetProperty("LastName").GetValue(validationContext.ObjectInstance, null);

  //check at least one has a value
  if (string.IsNullOrEmpty(FirstName) && string.IsNullOrEmpty(LastName))
        return new ValidationResult("At least one is required!!");

      return ValidationResult.Success;
    }
  }

使用法:

class Person{

 [ValidatePersonName]
 FirstName{get;set;}

 LastName{get;set;}
}
于 2012-12-17T13:46:10.777 に答える