数据模型需要两个属性之一

Wat*_* v2 7 asp.net-mvc entity-framework entity-framework-4 asp.net-mvc-3 asp.net-mvc-4

假设我有一个Person班级FirstNameLastName.我希望用户必须在UI中输入两个值中的至少一个,但他可能不必输入每个值.

如果我将Required属性/数据注释放在每个上面,那么这两个都需要它们.

如何为此规则进行服务器端验证(也使用客户端验证)?

Uli*_*ses 12

您可以使用自定义属性.简而言之,自定义属性将检索这两个值,然后确保至少有一个值具有值.有关更多信息,请参阅此页面.这是一个示例(未经测试的代码):

[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;
    }
  }
Run Code Online (Sandbox Code Playgroud)

用法:

class Person{

 [ValidatePersonName]
 FirstName{get;set;}

 LastName{get;set;}
}
Run Code Online (Sandbox Code Playgroud)