数据验证准备使用微软企业库进行验证,说白了就是在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 { get; set; }
/// <summary>
/// 册本号
/// </summary>
[CHValidator(MessageTemplateResourceName = "090102", MessageTemplateResourceType = typeof(Message))]
public string S_CH { get; set; }
/// <summary>
/// 用户编号
/// </summary>
[CIDValidator(MessageTemplateResourceName = "090103", MessageTemplateResourceType = typeof(Message))]
public string S_CID { get; set; }
/// <summary>
/// 客户编号
/// </summary>
[EnitityMapping(ColumnName="s_kehuid")]
[KHBHValidator(MessageTemplateResourceName = "090104", MessageTemplateResourceType = typeof(Message))]
public string S_KeHuBH { get; set; }
/// <summary>
/// 户名
/// </summary>
[EnitityMapping(ColumnName = "s_hm", Operater = Operater.Like)]
[HMValidator(MessageTemplateResourceName = "090105", MessageTemplateResourceType = typeof(Message))]
public string S_HM { get; set; }
/// <summary>
/// 地址
/// </summary>
[EnitityMapping(ColumnName = "s_dz",Operater= Operater.Like )]
[DZValidator(MessageTemplateResourceName = "090106", MessageTemplateResourceType = typeof(Message))]
public string S_DZ { get; set; }
}
}
//创建日期:<创建日期,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 { get; set; }
/// <summary>
/// 册本号
/// </summary>
[CHValidator(MessageTemplateResourceName = "090102", MessageTemplateResourceType = typeof(Message))]
public string S_CH { get; set; }
/// <summary>
/// 用户编号
/// </summary>
[CIDValidator(MessageTemplateResourceName = "090103", MessageTemplateResourceType = typeof(Message))]
public string S_CID { get; set; }
/// <summary>
/// 客户编号
/// </summary>
[EnitityMapping(ColumnName="s_kehuid")]
[KHBHValidator(MessageTemplateResourceName = "090104", MessageTemplateResourceType = typeof(Message))]
public string S_KeHuBH { get; set; }
/// <summary>
/// 户名
/// </summary>
[EnitityMapping(ColumnName = "s_hm", Operater = Operater.Like)]
[HMValidator(MessageTemplateResourceName = "090105", MessageTemplateResourceType = typeof(Message))]
public string S_HM { get; set; }
/// <summary>
/// 地址
/// </summary>
[EnitityMapping(ColumnName = "s_dz",Operater= Operater.Like )]
[DZValidator(MessageTemplateResourceName = "090106", MessageTemplateResourceType = typeof(Message))]
public string S_DZ { get; set; }
}
}
调用方法
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;
}
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));
}
}
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);
}
}
}
//创建日期:<创建日期,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://msdn.microsoft.com/en-us/library/ff664694%28v=PandP.50%29.aspx