欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-05 12:20:52
客户端验证 上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证。所以仅有客户端的验证还是不够的,我们还需要在服务器端进行再次验证。   va...
客户端验证

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

 

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验证脚本。