首页 > 其他分享 >实体验证--根据某个字段判断另一字段是否必填

实体验证--根据某个字段判断另一字段是否必填

时间:2022-09-30 10:57:20浏览次数:53  
标签:set 必填 get -- private field 一字段 public validationContext

/// <summary>
    /// 根据传入属性字段决定是否需要必填字段
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]
    public class CustomRequiredMinValueCompareAttribute : ValidationAttribute
    {
        private MinValueCompareAttribute innerAttribute;
        private string DependentProperty { get; set; }
        private object TargetValue { get; set; }

        public CustomRequiredMinValueCompareAttribute(string dependentProperty, object targetValue, int minimum)
        {
            this.DependentProperty = dependentProperty;
            this.TargetValue = targetValue;
            innerAttribute = new MinValueCompareAttribute(minimum);
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var field = validationContext.ObjectInstance.GetType().GetProperty(DependentProperty);
            if (field != null)
            {
                var dependentValue = field.GetValue(validationContext.ObjectInstance, null);
                if (Object.Equals(dependentValue, TargetValue))
                {
                    if (!innerAttribute.IsValid(value))
                        return new ValidationResult(ErrorMessage, new List<string>() { validationContext.MemberName });
                }
            }
            return ValidationResult.Success;
        }
}

以上是匹配最小值

/// <summary>
    /// 根据传入属性字段决定是否需要必填字段
    /// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]
    public class CustomRequiredValidationAttribute : ValidationAttribute
    {
        private RequiredAttribute innerAttribute = new RequiredAttribute();
        private string DependentProperty { get; set; }
        private object TargetValue { get; set; }

        public CustomRequiredValidationAttribute(string dependentProperty, object targetValue)
        {
            this.DependentProperty = dependentProperty;
            this.TargetValue = targetValue;
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            var field = validationContext.ObjectInstance.GetType().GetProperty(DependentProperty);
            if (field != null)
            {
                var dependentValue = field.GetValue(validationContext.ObjectInstance, null);
                if (Object.Equals(dependentValue, TargetValue))
                {
                    if (!innerAttribute.IsValid(value))
                        return new ValidationResult(ErrorMessage, new List<string>() { validationContext.MemberName });
                }
            }
            return ValidationResult.Success;
        }
}

匹配必填

使用:

        public bool IsVal { get; set; } = false;

        [CustomRequiredMinValueCompare("IsVal", true, 0, ErrorMessage = "IntValue不能为空!")]
        public int IntValue { get; set; }
        [CustomRequiredValidation("IsVal", true, ErrorMessage = "StringValue不能为空!")]
        public string StringValue { get; set; }

 

标签:set,必填,get,--,private,field,一字段,public,validationContext
From: https://www.cnblogs.com/X-Q-X/p/16744147.html

相关文章

  • SQL之前述
    1、背景前不久,买了本SQL必知必会,看了下,然后就开始在某客网刷题,从此篇起,1、准备结合<<SQL必知必会>>和某客网的题目开始记录 2、后面还会去搜......
  • 在 asp.net core 中,更换使用 Newtonsoft.Json 并阻止驼峰化命名
    首先需要在引用nuget包:Microsoft.AspNetCore.Mvc.NewtonsoftJson然后在添加MVC的Service时,进行添加配置:builder.Services.AddControllersWithViews().A......
  • 【Kubernetes】K8s笔记(四):从 Job 和 CronJob 看 Kubernetes 的设计理念
    0.前言:在线业务和离线业务Kubernetes的业务可以分为两大类:在线业务和离线业务。在线业务:像Nginx、MySQL这样长时间运行的业务,这些应用一旦运行起来,除非出错或者停......
  • JavaScript箭头函数的使用以及和普通函数之间的使用
    箭头函数的使用以及和普通函数之间的转换// 第一种不带参数    // var one = function(){    //   return 'I am one'    // }    var......
  • Golang 常问知识点(简略)
    前言稍微记录一下问题点吧,文章会不断的优化更新有些比较大的知识点,比如锁原理啥的,会单独拎出来写一篇,这里只是大概Go语言的基础数据类型占用大小类型大小......
  • [CodeForce] Maximum Subsequence
    ProblemStatement 1.Nisupto35,sotryingallpossiblesubsequencesistooslow(2^35).WecanapplythemeetinthemiddletechniqueanddivideAinto......
  • 《UNIX环境高级编程》第7-8章 进程环境和进程控制
    1.进程终止有八种方式使进程终止。其中5种是正常,它们是:从main函数返回调用exit调用_exit或_Exit最后一个线程从其启动例程返回从最后一个线程调用pthread_exit异......
  • sql排序函数 rank() / dense_rank()
    Rank排名函数1、rank()按照某字段的排序结果添加排名,但是他是跳跃的、间断的排名partitionby子句按照对应字段将结果集分为多个分区,然后orderby子句按分数对结果集进......
  • NAS存储
    转载:https://baike.baidu.com/item/NAS/3465615?fr=aladdin NAS被定义为一种特殊的专用数据存储服务器,包括存储器件(例如磁盘阵列、CD/DVD驱动器、磁带驱动器或可移......
  • 注解
    注解一、注解入门Annotation是jdk1.5开始引入的新技术。Annotation的作用:不是程序本身,可以对程序作出解释;可以被其他程序(例如编译器)读取。Annotation的格式......