如何在验证属性中访问父级的属性

时间:2018-07-11 09:58:18

标签: validation asp.net-core-mvc asp.net-core-2.0 validationattribute

在下面的代码中,我想使用AttributeValidation来检查是否根据其父元素的属性来给出字段。班级中的评论

  

RequiredIfParentState1

最能描述我的问题。

public class ChildModel()
{
   [RequiredIfParentState1]
   public string ImRequired { get; set; } 
}

public class ParentViewModel()
{
   public int state { get; set; }
   public ChildModel child = new ChildModel();
}

public class RequiredIfParentState1: ValidationAttribute, IClientModelValidator
{
   RequiredIfParentState1()
   {

   }
   void AddValidation(ClientModelValidationContext context)
   {

   }

   protected override ValidationResult IsValid(object i_value, ValidationContext i_context)
   {
      var element = i_context.ObjectInstance;

      if(i_value == null && //what do i have to put here to check if the state is 1?)
      {
         return new ValidationResult($"Field is Required in state 1.");
      }

      return ValidationResult.Success;
   }
}

1 个答案:

答案 0 :(得分:0)

我觉得这是错误的做法。

处于有效状态的对象是一回事(必填字段和类型检查),但是处理业务逻辑是另外一个问题。

您可以编写验证服务,该服务详细检查模型,检查业务逻辑问题并建立错误列表。

在发现错误的地方,您可以在响应中返回这些错误。