假设我有一个Person
班级FirstName
and LastName
。我希望用户必须在 UI 中输入两个值中的至少一个,但他可能不必输入每个值。
如果我Required
在它们中的每一个上放置属性/数据注释,这使得它们都成为必需的。
如何为此规则进行服务器端验证(也包括客户端验证)?
假设我有一个Person
班级FirstName
and LastName
。我希望用户必须在 UI 中输入两个值中的至少一个,但他可能不必输入每个值。
如果我Required
在它们中的每一个上放置属性/数据注释,这使得它们都成为必需的。
如何为此规则进行服务器端验证(也包括客户端验证)?
您可以为此使用自定义属性。简而言之,自定义属性将检索这两个值,然后确保至少一个具有值。请参阅此页面了解更多信息。这是一个示例(未经测试的代码):
[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;}
}