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

相关内容

热门资讯

分享一款!超级三加一辅助工具安... 分享一款!超级三加一辅助工具安装,蜀渝牌乐汇修改器,详细攻略(有挂技巧)1、很好的工具软件,可以解锁...
热点推荐!科乐填大坑作弊码,科... 热点推荐!科乐填大坑作弊码,科乐填大坑作弊码,详细app(发现有挂)1、用户打开应用后不用登录就可以...
实测发现!钱柜手游辅助,创思维... 实测发现!钱柜手游辅助,创思维激k有挂吗,详细工具(有挂实锤)创思维激k有挂吗破解侠是真的助透视。每...
总算了解!填大坑辅助视频,潮友... 总算了解!填大坑辅助视频,潮友会鱼虾蟹怎么发现软件控制,详细插件(证实有挂)1)潮友会鱼虾蟹怎么发现...
必备教程!九酷众游辅助,奇迹陕... 必备教程!九酷众游辅助,奇迹陕西游戏辅助器,详细app(有挂工具)1、用户打开应用后不用登录就可以直...
重磅来袭!天天微友开控制多少钱... 重磅来袭!天天微友开控制多少钱,福州十八扑外卦,详细工具(今日头条)1、上手简单,内置详细流程视频教...
研究成果!雀神麻将辅助透视,汇... 研究成果!雀神麻将辅助透视,汇城辅助,详细神器(有挂攻略)1、这是跨平台的雀神麻将辅助透视轻量版有透...
最新技巧!边锋辅助器小程序微信... 最新技巧!边锋辅助器小程序微信,微信边锋辅助下载,详细神器(真的有挂)1、下载好边锋辅助器小程序微信...
玩家必看!江西微乐南昌有辅助,... 玩家必看!江西微乐南昌有辅助,微乐广西小程序,详细方法(有挂辅助)1、超多福利:超高返利,海量正版游...
查到实测辅助!微信途游有辅助吗... 查到实测辅助!微信途游有辅助吗,雀姬手游辅助,详细插件(有挂功能)1、微信途游有辅助吗透视辅助软件激...