Person
と のクラスがあるFirstName
としましょうLastName
。ユーザーが UI に 2 つの値の少なくとも 1 つを入力する必要があることを望みますが、それぞれを入力する必要はないかもしれません。
それぞれにRequired
属性/データ注釈を配置すると、両方が必要になります。
このルールのサーバー側の検証 (クライアント側の検証も) を行うにはどうすればよいですか?
Person
と のクラスがあるFirstName
としましょうLastName
。ユーザーが UI に 2 つの値の少なくとも 1 つを入力する必要があることを望みますが、それぞれを入力する必要はないかもしれません。
それぞれにRequired
属性/データ注釈を配置すると、両方が必要になります。
このルールのサーバー側の検証 (クライアント側の検証も) を行うにはどうすればよいですか?
これにはカスタム属性を使用できます。つまり、カスタム属性は両方の値を取得し、少なくとも 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;}
}