【问题标题】:One of two properties is required from the data model数据模型需要两个属性之一
【发布时间】:2016-10-24 16:24:56
【问题描述】:

假设我有一个带有FirstNameLastNamePerson 类。我希望用户必须在 UI 中输入两个值中的至少一个,但他可能不必输入每个值。

如果我将Required 属性/数据注释分别放在它们上,则它们都需要。

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

【问题讨论】:

  • 我不知道 asp.net,但如果它在 php 中作为教义工作,那么您应该在数据库上为 prepersist 数据设置一个事件。如果两个值都为空,您应该在该事件上创建一个引发错误的条件?

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4 asp.net-mvc-4


【解决方案1】:

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

[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;}
}

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2021-09-10
    • 2010-10-20
    • 2017-03-23
    • 1970-01-01
    • 2016-01-05
    • 2021-05-07
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多