ASP.NETMVC:基于两个字段长度的DataAnnotation自定义验证方法
创始人
2024-11-12 05:30:16
0次
  1. 首先,在需要自定义验证的Model中,添加需要验证的两个属性。

public class MyModel { public string Field1 { get; set; }

public string Field2 { get; set; }

}

  1. 接着,定义一个新的自定义ValidationAttribute类,命名为StringLengthComparisonAttribute,并继承ValidationAttribute类。

public class StringLengthComparisonAttribute : ValidationAttribute { private readonly string _dependentProperty; private readonly ComparisonOperator _comparisonOperator; private readonly int _dependentPropertyValue;

public StringLengthComparisonAttribute(string dependentProperty, ComparisonOperator comparisonOperator, int dependentPropertyValue)
{
    _dependentProperty = dependentProperty;
    _comparisonOperator = comparisonOperator;
    _dependentPropertyValue = dependentPropertyValue;
}

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
    var dependentProperty = validationContext.ObjectType.GetProperty(_dependentProperty);
    if (dependentProperty == null)
    {
        return new ValidationResult($"Unknown property {_dependentProperty}");
    }

    var dependentPropertyValue = dependentProperty.GetValue(validationContext.ObjectInstance, null);

    if (!int.TryParse(dependentPropertyValue.ToString(), out int intDependentPropertyValue))
    {
        return new ValidationResult($"Property {_dependentProperty} is not of type int");
    }

    if (value == null)
    {
        return ValidationResult.Success;
    }

    var valueString = value.ToString();

    var dependentPropertyValueString = dependentPropertyValue.ToString();
    
    if(_comparisonOperator == ComparisonOperator.GreaterThan) 
    {
        if (valueString.Length > intDependentPropertyValue)
        {
            return new ValidationResult($"The length of {validationContext.DisplayName} must be greater than the length of {_dependentProperty}");
        }
    } 
    else if(_comparisonOperator == ComparisonOperator.LessThan) 
    {
        if (valueString.Length < intDependentPropertyValue)
        {
            return new ValidationResult($"The length of {validationContext.DisplayName} must be less than the length of {_dependentProperty}");
        }
    }
    
    return ValidationResult.Success;
}

}

在StringComparisonOperator枚举中定义比较运算符。

public enum ComparisonOperator { LessThan, GreaterThan }

  1. 最后,在需要验证的属性

相关内容

热门资讯

教学盘点透视挂!如意棋牌透视挂... 教学盘点透视挂!如意棋牌透视挂AI插件,如意棋牌多功能一直真的有透视挂插件1、很好的工具软件,可以解...
总算清楚作弊器!缙云游戏中心作... 总算清楚作弊器!缙云游戏中心作弊器AI工具,缙云游戏中心多功能确实有作弊器工具1、操作简单,无需缙云...
查到实测辅助开挂!微乐河北麻将... 查到实测辅助开挂!微乐河北麻将开挂AI工具,微乐河北麻将多功能原来真的有开挂工具1、在微乐河北麻将插...
关于作弊器!九九麻将作弊器AI... 关于作弊器!九九麻将作弊器AIapp,九九麻将多功能果然是有作弊器app1、全新机制【九九麻将ai辅...
最新技巧透视器!兴动游戏透视器... 最新技巧透视器!兴动游戏透视器AI教程,兴动游戏多功能原来有透视器教程1、玩家可以在兴动游戏线上大神...
盘点一款透视器!鸿福休闲透视器... 盘点一款透视器!鸿福休闲透视器AI教程,鸿福休闲多功能原来是真的有透视器教程1)鸿福休闲辅助插件:进...
技术分享作弊器!新老夫子作弊器... 技术分享作弊器!新老夫子作弊器AI技巧,新老夫子多功能一直存在有作弊器技巧1、新老夫子辅助软件下载优...
玩家必看教程外挂!残局斗地主外... 玩家必看教程外挂!残局斗地主外挂AI插件,残局斗地主多功能真是有外挂插件1、残局斗地主公共底牌简单,...
今日百科作弊器!欢乐茶馆作弊器... 今日百科作弊器!欢乐茶馆作弊器AIapp,欢乐茶馆多功能果然是有作弊器app一、欢乐茶馆游戏安装教程...
揭秘几款辅助!君悦来辅助AI工... 揭秘几款辅助!君悦来辅助AI工具,君悦来多功能竟然存在有辅助工具1、君悦来辅助器安装包、君悦来辅助器...