zoukankan      html  css  js  c++  java
  • ASP.NET MVC ValidationAttribute 服务器端自定义验证

    自己开发的公众号,可以领取淘宝内部优惠券

    客户端验证

    上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证。所以仅有客户端的验证还是不够的,我们还需要在服务器端进行再次验证。

    ValidationAttribute

    服务端验证要继承自ValidationAttribute,并重写IsValid虚方法来自定义自己的验证规则,ValidationAttribute声明大致如下

    public abstract class ValidationAttribute : Attribute
        {
           //验证失败提示消息
           public virtual string FormatErrorMessage(string name);
           
           //自定义验证一
           protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
    
            //自定义验证二
            public virtual bool IsValid(object value);
        }

    UrlAttribute

    UrlAttribute 是用来验证Url格式的有效性,这个特性在NET Framework 4.5已经自带实现。我们就参考着做个例子。

    public class Link
        {
            [Required]
            [DisplayName("文字")]
            public string Text { get; set; }
            [Url]
            [Required]
            [DisplayName("Url链接")]
            public string Url { get; set; }
        }
    
        public class UrlAttribute : ValidationAttribute,IClientValidatable
        {
            public override string FormatErrorMessage(string name)
            {
                return string.Format("{0}格式有误", name);
            }
    
            public UrlAttribute()
            {
            }
    
            public override bool IsValid(object value)
            {
                var text = value as string;
                Uri uri;
    
                return (!string.IsNullOrWhiteSpace(text) && Uri.TryCreate(text, UriKind.Absolute, out uri));
            }
    
            public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
            {
                var validationRule = new ModelClientValidationRule
                {
                    ErrorMessage = FormatErrorMessage(metadata.DisplayName),
                    ValidationType = "url",
                };
    
                yield return validationRule;
            }
        }
    

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

    我们将ValidationType名字改下取消客户端验证,提交到服务端进行验证

    代码下载

  • 相关阅读:
    预分区
    Flume学习笔记
    1
    在视图中使用时间
    Java 正则表达式的使用
    Reactor模式(反应器模式)
    Control character in cookie value, consider BASE64 encoding your value , java操作cookie遇到中文会报错的解决方案
    关于这周工作中遇到的关于缓存问题的记录
    eclipse import的项目报autowired cannot be resolved to a type的错误
    m2e插件的新下载地址
  • 原文地址:https://www.cnblogs.com/yehuabin/p/2708996.html
Copyright © 2011-2022 走看看