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

 

转载于:https://www.cnblogs.com/zyizyizyi/archive/2012/05/31/2528953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值