基础拾遗-----数据注解与验证

 
前言

其实对于这块知识点,一直觉得没有必要进行总结,只是新到的公司当时用到了 kendo for asp.net mvc ,里面有用到,自动初始化页面,而依据基于对象属性的注解与验证,故此抽时间总计了一下吧。借鉴与《asp.net mvc 5高级编程》

验证注解的使用

数据注解定义在一般在命名空间”System.ComponentModel.DataAnnotations”提供了服务器端验证的功能,当在模型的属性上使用时,框架也支持客户端验证。在命名空间DataAnnotations总工有4个特性可以用于一般的验证场合。

1.Required强调不能为空

[Required(ErrorMessage= "{0}不能为空")]

public Guid BID { get;set; }

2.StringLength控制字段长度

 [StringLength(4000, MinimumLength = 1,ErrorMessage = "{0}长度在{2}-{1}之间")]

 public String Enclosure { get; set; }

3.RegularExpression正则表达式

[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "邮箱输入有误,重新输入。")]       

public string Email{ get; set; }

4.Range指定值类型的范围

[Range(35,44,ErrorMessage = "年龄不符合要求")]

 public int Age { get; set; }

5.Compare两次输入必须一致

[RegularExpression(@"^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+",ErrorMessage = "邮箱输入有误,重新输入。")]       

public string Email{ get; set; }

[Compare("Email ")]

public stringEmail2 { get; set; }

6.Remote是mvc框架为应用程序在命名空间system.web.mvc额外添加的可以利用服务器端的回到函数执行客户端的验证逻辑

[Remote("CheckUserName", "Admin")]

public stringUserName { get; set; }

public JsonResult CheckUserName(string username)

{

 returnJson(DateTime.Now.ToString(),JsonRequestBehavior.AllowGet);

}

显示和编辑注解

1.DisplayName显示名称

  [DisplayName("金额(元)")]

  publicDecimal Money { get; set; }

2.ScaffoldColumn可以隐藏HTML的辅助方法

[ScaffoldColumn(false)]

public stringUserName { get; set; }

注:虽然ScaffoldColumn可以做到不显示一些属性在页面上被编辑,但是如果提交的Form有这个属性值,模型绑定机制依然会绑定此属性值。

3.DisplayFormat处理属性的各种格式。比如日期,浮点数等

[DisplayFormat(ApplyFormatInEditMode= true,DataFormatString = "{0:c}")]

public decimal Total{ get; set; }

4.ReadOnly只读

        [DisplayName("计取时间")]

        [ReadOnly(true)]

        public string RememberTime { get; set; }

5.运行时提供关于属性的特定用途信息。

[Required(ErrorMessage= "密码不能为空")]

[DataType(DataType.Password)]

public stringPassword { get; set; }

自定义验证属性

其实这个方法就是定一个特性,进行验证。至于特性前面的文章有涉及。

下面对此的应用如下:


 [SelectList("/Inspect/GetSite?all=0",

            HttpVerbs.Post,

             CascadeFrom = "SegmentID",

             DataValueField = "SiteID",

             DataTextField = "Name",

             Data = @"function(){

                        return { segmentId:$(""#SegmentID"").val() };

                    }",

             DataType = "DropDownList")]

        [Required(ErrorMessage = "{0}不能为空")]

        public Guid SiteID { get; set; }


具体实现如下

 

[AttributeUsage(AttributeTargets.Property,AllowMultiple=false, Inherited=true)]

    public class SelectListAttribute : Attribute,IMetadataAware

    {

        public SelectListAttribute(string remoteUrl, System.Web.Mvc.HttpVerbs httpVerbs = 1)

        {

            if(remoteUrl == null)

            {

                thrownew ArgumentNullException("remoteUrl");

            }

            this.RemoteUrl= remoteUrl;

            this.HttpVerbs= httpVerbs;

            this.ServerFiltering= true;

        }

       

        public voidOnMetadataCreated(ModelMetadata metadata)

        {

            if(metadata == null)

            {

                thrownew ArgumentNullException("metadata");

            }

            IDictionary<string, string> dictionary = null;

            if(!string.IsNullOrEmpty(this.AdditionalValues))

            {

                try

                {

                    dictionary = this.AdditionalValues.FromJson<IDictionary<string, string>>();

                }

                catch

                {

                    dictionary = newDictionary<string, string>();

                }

                if((dictionary != null) && (dictionary.Count > 0))

                {

                    foreach (KeyValuePair<string, string> pair in dictionary)

                    {

                       metadata.AdditionalValues[pair.Key] = pair.Value;

                    }

                }

            }

            metadata.AdditionalValues["RemoteUrl"] = this.RemoteUrl;

            metadata.AdditionalValues["Type"] = this.HttpVerbs;

            metadata.AdditionalValues["Data"] = this.Data;

            metadata.AdditionalValues["ServerFiltering"] = this.ServerFiltering;

            metadata.AdditionalValues["Events"] = this.ParseEvents(this.Events);

            metadata.AdditionalValues["CascadeFrom"] = this.CascadeFrom;

            metadata.AdditionalValues["Recursion"] = this.Recursion;

            metadata.AdditionalValues["Multiple"] = this.Multiple;

            metadata.AdditionalValues["DataTextField"] = this.DataTextField;

            metadata.AdditionalValues["DataValueField"] = this.DataValueField;

            metadata.DataTypeName = this.DataType;

        }

       

        private IDictionary<string, string> ParseEvents(string value)

        {

            try

            {

                if(string.IsNullOrWhiteSpace(value))

                {

                    value = "{}";

                }

                return new Dictionary<string, string>(value.FromJson<IDictionary<string, string>>(), StringComparer.OrdinalIgnoreCase);

            }

            catch

            {

                return new Dictionary<string, string>();

            }

        }

       

        public string AdditionalValues { get; set; }

       

        public string CascadeFrom { get; set; }

       

        public string Data { get; set; }

       

        public string DataTextField { get; set; }

       

        public string DataType { get; set; }

       

        public string DataValueField { get; set; }

       

        public string Events { get; set; }

       

        public System.Web.Mvc.HttpVerbs HttpVerbs { get; private set; }

       

        public bool Multiple { get; set; }

       

        public bool Recursion { get; set; }

       

        public string RemoteUrl { get; private set; }

       

        public bool ServerFiltering { get; set; }

    }

更多web前端免费学习内容,加群434623999

posted @ 2017-12-05 14:25  CC大神01  阅读(210)  评论(0编辑  收藏  举报