• Enterprise Library 3.0 体验 Validation Application Block (3)


       前面提到过使用Validation Application Block进行数据验证的方式有两种,1. 使用Attribute  2.使用配制文件(WebConfipAppConfig….),在前两篇里,
    l          Enterprise Library 3.0 体验 -- Validation Application Block (1)
    l          Enterprise Library 3.0 体验 -- Validation Application Block (2)
    介绍的是使用Attribute进行验证的方法,今天再来演示一下如何使用Configuration File进行验证。

    注意

      这里使用的Enterprise Library版本为 3.0 December 2006 CTP ,由于该版本是CTP版本,所以功能尚不完善,目前的这个版本里所带的配置工具(EL 3.0 Configuration)并不支持Validationxml配置信息的图形化操作,因此只能手工的在配置文件中添加数据验证规则。相信在正式版本中,这个问题会得到妥善的解决。

    仍然以ValidationDemo1中的Student实体类为例,省略部分相似代码,详细代码可参照示例1.
    其数据有效性规则如下:
         学号:非空,长度为9位。
         姓名:非空,长度为1~10之间。
         年龄:允许为空,但是大小要在18~24岁之间。

    1.          新建一个控制台工程: ValidationDemo3

    2.          添加引用: Microsoft.Practices.EnterpriseLibrary.Validation

    3.          添加实体类Student.,此处不需要添加任何Attribute

     1     public class Student
     2     {
     3         private string _stdNo;
     4         public string StdNo
     5         {
     6             get { return _stdNo; }
     7             set { _stdNo = value; }
     8         }
     9 
    10         private string _name;
    11         public string Name
    12         {
    13             get { return _name; }
    14             set { _name = value; }
    15         }
    16 
    17         private int _age;
    18         public int Age
    19         {
    20             get { return _age; }
    21             set { _age = value; }
    22         }
    23     }

    4.          为项目添加一个配置文件app.config ,并在配置文件中添加对于Student类的验证规则:

     1 <configuration>
     2     <configSections>
     3         <section name="validation" type="Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.ValidationSettings,Microsoft.Practices.EnterpriseLibrary.Validation"/>
     4     </configSections>
     5     <validation>
     6         <type name="Validation_Application_Block_Part3.Student" defaultRule="default">
     7             <rule name="default">
     8                 <properties>
     9                     <property name="StdNo">
    10                         <add name="StdNoNotNull" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator,Microsoft.Practices.EnterpriseLibrary.Validation" />
    11                         <add name="StdNoLength" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator,Microsoft.Practices.EnterpriseLibrary.Validation" lowerBound="9" upperBound="9" lowerBoundType="Inclusive" upperBoundType="Inclusive"/>
    12                     </property>
    13                     <property name="Name">
    14                         <add name="NameNotNull" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator,Microsoft.Practices.EnterpriseLibrary.Validation" />
    15                     </property>
    16                     <property name="Age">                        
    17                     </property>
    18                 </properties>
    19             </rule>
    20         </type>
    21     </validation>
    22 </configuration>

    5.          编写测试程序并添加命名空间: Microsoft.Practices.EnterpriseLibrary.Validation

    6.          运行程序,察看输出结果。

    关于配置信息的几点说明:

    l          通过type name属性来指定需要验证的实体类的名称,这里的value应当是命名空间+类名,namespace.calssname.

    l          配置文件中仍然支持规则集(RuleSet)的定义,并且可以通过defaultRule 属性来指定一个规则集作为默认的验证规则。

    l          对于数据范围的验证,StringLengthValidator,需要通过属性(lowerBoundupperBound)来指定它的上下边界。

    l          如果仅仅使用配置文件来定义数据规则而不使用Attrubute,推荐使用Validation.ValidateFromConfiguation()方法来替代Validation.Validate()方法,这样可以避免实例化IAttributeSource接口,在一定程度上提高了运行效率。 

    总结:

    本文介绍了使用Validation Application Block的另一种方法,既通过配置文件来定义数据规则,它同样支持规则集(RuleSet)等功能,此外在配置文件中定义数据规则具有更高的灵活性,不需要重新编译程序就可以达到动态改变数据规则的要求。缺点是目前EL 3.0 CTP版本尚不支持 Validation Configuration Configuration Tool的集成,需要手工填写配置信息,相对有些繁琐。 

    此外细心的朋友可能发现,配置文件中并没有对Age属性的验证定义,是因为我在写这个例子的过程中,并没有找到Int32RangeValidator的边界的定义方法,由于Int32RangeValidator要求是整数型,所以如果按照StringLengthValidator的方法来定义上下界则会报错,望高手指点。

  • 相关阅读:
    [ASP.NET][实例]用户控件的设计与使用
    构造器[java、C#]
    [转]clob和blob两个字段什么分别?
    C#的反射机制调用方法
    C# WinForm 控件美化之改变ListView Head 的背景色
    C# 创建快捷方式
    Copy Html To Clipboard
    改善C#程序的建议在线程同步中使用信号量
    Paste html from Clipboard
    Winform部署mshtml程序集出错的一个解决方案
  • 原文地址:https://www.cnblogs.com/shenfx318/p/614174.html
Copyright © 2020-2023  润新知