c# - 具有父条件的嵌套对象的条件验证

标签 c# validation asp.net-core

我有以下类(class):

class A {
    [Required]
    public string Status { get; set; }
    public B b_instance { get; set; }
}

class B {
    **[RequiredIf("A.Status == 'Active'")**
    public string x { get; set; }
}
如上所述,我希望 B 类具有条件验证:A.Status = 'Active' 然后 B 类具有 [Required] x,否则不需要 b_instance.x。

最佳答案

如果您使用 MVC,您可以在 razor View 中添加额外的验证:


@if (Model.Status == "Active")
{
    <input class="form-control" asp-for="..." required="required" />
}
else
{
    <input class="form-control" asp-for="..." />
}

如果像您提到的那样,您需要 BE 方面的解决方案,您可以尝试使用自定义验证属性:

 public class A
 {
      [Required]
      public string Status { get; set; }
      public StatusEnum StatusEnum { get; set; }
      public B b_instance { get; set; }
    }

    public enum StatusEnum
    {
        Active = 1,
        Deactivated = 2,
    }

    public class B : A 
    {
        [RequiredIf("Status", StatusEnum.Active , ErrorMessage = "...")]
        public string x { get; set; }
    }

    public class RequiredIfAttribute : ValidationAttribute
    {
        public string PropertyName { get; set; }
        public object Value { get; set; }

        public RequiredIfAttribute(string propertyName, object value, string errorMessage = "")
        {
            PropertyName = propertyName;
            ErrorMessage = errorMessage;
            Value = value;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var instance = validationContext.ObjectInstance;
            var type = instance.GetType();
            var propertyValue = type.GetProperty(PropertyName).GetValue(instance, null);
            if (propertyValue .ToString() == Value.ToString() && value == null)
            {
                return new ValidationResult(ErrorMessage);
            }
            return ValidationResult.Success;
        }
    }

关于c# - 具有父条件的嵌套对象的条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67883976/

相关文章:

c# - 将指数转换为整数

c# - 如何使用 .net 为 DB2 的 sql 语句定义终止符

eclipse - Zend Studio 的 HTML5 验证

jquery - JavaScript 的 IF 语句

javascript - 如何在 Razor 页面中有条件地绘制 DataTables 列

c# - 如何使用来自 asp.net Web API 的 webApi 将结果存储在数据库中?

c# - 可以在 C# 应用程序中执行实时多 channel 音频卷积吗?

java - 是否可以将自定义属性添加到 java bean 验证注释?

asp.net - 将具有策略的授权应用于 asp.net core 中命名空间内的所有 Controller

linux - 无法识别的参数格式hosting.ini