ASP.NET MVC ValidationAttribute 服务器端自定义验证

自定义服务端验证要继承自ValidationAttribute,并重写IsValid虚方法来自定义自己的验证规则,ValidationAttribute源码如下:

 1 public abstract class ValidationAttribute : Attribute
 2     {
 3        //验证失败提示消息
 4        public virtual string FormatErrorMessage(string name);
 5         
 6        //自定义验证一
 7        protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
 8  
 9         //自定义验证二
10         public virtual bool IsValid(object value);
11     }

参考系统实例:

public class Link
    {
        [Required]
        [DisplayName("文字")]
        public string Text { get; set; }
        [Url]
        [Required]
        [DisplayName("Url链接")]
        public string Url { get; set; }
    }
实体类
 1 public class UrlAttribute : ValidationAttribute,IClientValidatable
 2     {
 3         public override string FormatErrorMessage(string name)
 4         {
 5             return string.Format("{0}格式有误", name);
 6         }
 7  
 8         public UrlAttribute()
 9         {
10         }
11  
12         public override bool IsValid(object value)
13         {
14             var text = value as string;
15             Uri uri;
16  
17             return (!string.IsNullOrWhiteSpace(text) && Uri.TryCreate(text, UriKind.Absolute, out uri));
18         }
19  
20         public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
21         {
22             var validationRule = new ModelClientValidationRule
23             {
24                 ErrorMessage = FormatErrorMessage(metadata.DisplayName),
25                 ValidationType = "url",
26             };
27  
28             yield return validationRule;
29         }
30     }

UrlAttribute实现服务端和客户端的验证,客户端我们只是为input控件添加data-val-url属性,但他的客户端验证还是有效的,因为validate这个插件已经实现它的js验证脚本。

IValidatableObject接口实现Model数据验证

如果在自定义的业务逻辑中,获取到当前类的其他字典。。。
因为验证逻辑需要根据当前model的多个字段来综合判断。

实现起来很简单,需要model继承IValidatableObject接口

public class Student : IValidatableObject
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (Age % 2 == 0)
            {
                var result = new ValidationResult("年龄的验证有问题",new string[]{"Age"});

                yield return result;
            }
        }
    }

 

转载于:https://www.cnblogs.com/cuijl/p/7423241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值