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

     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名字改下取消客户端验证,提交到服务端进行验证

    代码下载

     
     
     
    标签: asp.netmvc
  • 相关阅读:
    常用公式 距离、波形、力
    代码字体
    关于flash缩放的详细解释
    色调
    工程项目1
    使用double无法得到数学上的精确结果的原因及为何不能用double来初始化BigDecimal
    第一次测验感受
    原码,补码,反码的概念及Java中使用那种存储方式
    static的含义
    第一次测试代码
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3589438.html
Copyright © 2011-2022 走看看