• CSMS2数据验证


    数据验证准备使用微软企业库进行验证,说白了就是在dto上面加特性。

    下面看下最终的dto:

    //********************************************************
    //创建日期:<创建日期,2012-05-25>
    //创建作者:<张易,zhangyi@shanghai3h.com>
    //功能说明:  复核登记查询DTO
    //********************************************************
    using System.Runtime.Serialization;
    using CSMS2.Application.SelfValidation;
    using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
    using System;
    using CSMS2.Resources;
    using CSMS2.Entity;

    namespace CSMS2.Application.DTO.BiaoWuGL
    {
        [EnitityMapping(TableName="bw_fuhedj_view")]
        public class FuHeDJSearchDTO
        {
            /// <summary>
            
    /// 站点号
            
    /// </summary>
            [STValidator(MessageTemplateResourceName = "090101", MessageTemplateResourceType = typeof(Message))]
            public string S_ST { getset; }

            /// <summary>
            
    /// 册本号
            
    /// </summary>
            [CHValidator(MessageTemplateResourceName = "090102", MessageTemplateResourceType = typeof(Message))]
            public string S_CH { getset; }

            /// <summary>
            
    /// 用户编号
            
    /// </summary>
            [CIDValidator(MessageTemplateResourceName = "090103", MessageTemplateResourceType = typeof(Message))]
            public string S_CID { getset; }

            /// <summary>
            
    /// 客户编号
            
    /// </summary>
            [EnitityMapping(ColumnName="s_kehuid")]
            [KHBHValidator(MessageTemplateResourceName = "090104", MessageTemplateResourceType = typeof(Message))]
            public string S_KeHuBH { getset; }

            /// <summary>
            
    /// 户名
            
    /// </summary>
            [EnitityMapping(ColumnName = "s_hm", Operater = Operater.Like)]
            [HMValidator(MessageTemplateResourceName = "090105", MessageTemplateResourceType = typeof(Message))]
            public string S_HM { getset; }

            /// <summary>
            
    /// 地址
            
    /// </summary>
            [EnitityMapping(ColumnName = "s_dz",Operater= Operater.Like )]
            [DZValidator(MessageTemplateResourceName = "090106", MessageTemplateResourceType = typeof(Message))]
            public string S_DZ { getset; }

        }
    }

    调用方法

                CSMS2.Application.DTO.BiaoWuGL.FuHeDJSearchDTO searchDTO=new Application.DTO.BiaoWuGL.FuHeDJSearchDTO();
                searchDTO.S_ST = ComTreeZhanDian.SelectValue;
                searchDTO.S_CH = LueCH.EditValue.ToString();
                searchDTO.S_CID = TxtZhangHao.Text.ToString();
                searchDTO.S_KeHuBH = TxtKeHuBH.Text.ToString();
                searchDTO.S_HM = TxtS_HM.Text.ToString();
                searchDTO.S_DZ = TxtS_DZ.Text.ToString();
                string message;
                if (!DataAnnotationsEntityValidator.IsValid<CSMS2.Application.DTO.BiaoWuGL.FuHeDJSearchDTO>(searchDTO, out message))
                {
                    AlterHelper.MessageBoxShowInfo(message);
                    return;
                }

    通过代码可以看到我们只需要负责dto的赋值,然后调用DataAnnotationsEntityValidator的IsValid方法就可,将最终的错误结果输出就可以了。

    在DTO中这里主要使用了自定义验证,验证提示放在资源文件中。如有公共的验证信息都可以放在CSMS2.Application.SelfValidation下,现在已经有了用户编号、站点、户名、地址、客户编号的检验。如果有多个属性需要一起验证需要使用HasSelfValidation。代码如下:

    using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;

    using Microsoft.Practices.EnterpriseLibrary.Validation;

    using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

     

    [HasSelfValidation]

    public class TemperatureRange

    {

      private int min;

      private int max;

     

      // ...

     

      [SelfValidation]

      public void CheckTemperature(ValidationResults results)

      {

        if (max < min)

          results.AddResult(new ValidationResult("Max less than min"this""""null));

      }

    }

    自定义验证的写法大致如下:

    //********************************************************************************//
    //创建日期:<创建日期,2012-02-14>
    //创建作者:<张易,zhangyi@shanghai3h.com>
    //功能说明:对户名进行校验
    //********************************************************************************//
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
    using Microsoft.Practices.EnterpriseLibrary.Validation;
    using CSMS2.Infrastructure.Helpers;

    namespace CSMS2.Application.SelfValidation
    {
        public class HMValidator : Validator<string>
        {
            public HMValidator(string messageTemplate, string tag)
                : base(messageTemplate, tag)
            {

            }

            protected override string DefaultMessageTemplate
            {
                get { throw new NotImplementedException(); }
            }

            protected override void DoValidate(string objectToValidate, object currentTarget,
                string key, ValidationResults validationResults)
            {
                bool result = false;

                string hm = objectToValidate.ToString();
                int length = System.Text.Encoding.Default.GetByteCount(hm);
                if (length >= 0 && length <= 200)
                    result = true
                if (!result)
                {
                    LogValidationResult(validationResults, this.MessageTemplate, currentTarget, key);
                }
            }
        }

        public class HMValidatorAttribute : ValidatorAttribute
        {
            protected override Validator DoCreateValidator(Type targetType)
            {
                return new HMValidator(string.Empty, string.Empty);
            }
        }
       
    }

    其他的验证规则可以直接参看如下文章:

    http://www.cnblogs.com/kyo-yo/archive/2010/07/19/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part1.html

    http://www.cnblogs.com/kyo-yo/archive/2010/07/21/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part2.html

    http://www.cnblogs.com/kyo-yo/archive/2010/08/02/Learning-EntLib-Fifth-Introduction-Validation-module-information-Part3.html

    http://msdn.microsoft.com/en-us/library/ff664694%28v=PandP.50%29.aspx

  • 相关阅读:
    跟随标准与Webkit源码探究DOM -- 获取元素之querySelector,querySelectorAll
    跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByClassName
    跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByTagName
    跟随标准与Webkit源码探究DOM -- 获取元素之getElementsByName
    跟随标准与Webkit源码探究DOM -- 获取元素之getElementById
    原生DOM探究 -- NodeList v.s. HTMLCollection
    Jira 在流程节点中每个状态权限设置
    Eureka集群配置
    Linux下搭建 redis
    python框架django中结合vue进行前后端分离
  • 原文地址:https://www.cnblogs.com/zyizyizyi/p/2528953.html
Copyright © 2020-2023  润新知