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. 最后,在需要验证的属性

相关内容

热门资讯

实测辅助!雀姬手游辅助脚本,欢... 欢乐达人葫芦鱼辅助器开挂教程视频分享装挂详细步骤在当今的网络游戏中,欢乐达人葫芦鱼辅助器作为一种经典...
了解开挂!道游辅助脚本,蜀山四... 《了解开挂!道游辅助脚本,蜀山四川辅助(太夸张了辅助开挂脚本)》 蜀山四川辅助软件透视开挂更新公告新...
教会透视"wepok... 教会透视"wepokerplus有没有挂"开挂(透视)辅助器(终于知道详细教程)教会透视"wepok...
关于辅助!微信小程序雀神插件哪... 关于辅助!微信小程序雀神插件哪里开启,麻友圈插件(透视软件开挂辅助工具);无需打开直接搜索加薇136...
原来有辅助!雀神广东定制插件辅... 【福星临门,好运相随】;原来有辅助!雀神广东定制插件辅助,九九山城万州版脚本(太夸张了开挂辅助脚本)...
分析透视"wepok... 分析透视"wepokerplus挂先试用后付款"开挂(透视)辅助软件(一起来探讨可靠技巧)分析透视"...
细节辅助!悟空大厅辅助器,顺欣... >>您好:顺欣茶楼辅助软件视频确实是有挂的,很多玩家在这款顺欣茶楼辅助软件视频游戏中打牌都会发现很多...
了解辅助!蛮王大厅脚本辅助,老... 了解辅助!蛮王大厅脚本辅助,老友广东辅助工具下载地址(太夸张了辅助开挂平台);老友广东辅助工具下载地...
发现透视"wepok... 发现透视"wepoker透视脚本配置"开挂(透视)辅助软件(技术分享技巧教程)发现透视"wepoke...
推荐开挂!皇豪互众控制系统下载... 推荐开挂!皇豪互众控制系统下载,蘑菇云游破解版(透视了解开挂辅助平台);无需打开直接搜索加薇1367...