Enterprise Library 4.1学习笔记5----实体验证程序块

实体验证的作用简单来讲,就是从服务端对数据进行验证。(特别是对数据安全性要求比较高的应用,这是十分必要的)

废话不说了,直接讲下使用步骤:(因为我是做web开发的,主要是讲解asp.net环境中的使用)

1.先添加Microsoft.Practices.EnterpriseLibrary.Validation.dll的引用

2.最基本的使用方法(也是我最不喜欢的一种方式),直接在实体类上通过添加特性实现

实体类如下:

public class Person
{       

    [StringLengthValidator(2, 12, MessageTemplate = "请输入2-12位长度的字符")]          
    public string Name
    {
        set;
        get;
    }

    [RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate = "请输入有效的Email地址")]
    public string Email
    {
        set;
        get;
    }
}

该方式必须在原有代码几乎每个字段上都要修改,而且这种硬编码的写法比较晕(何况对于linq to sql这类东东,修改dbml后用户所做的修改都会丢失)

 

 

3.然后就可以验证了,代码如下:

using System;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

protected void Page_Load(object sender, EventArgs e)
{
    Person _p = new Person() { Name = "1", Email = "jimmy.yang#126.com" };

    ValidationResults _results = Validation.Validate<Person>(_p); 
    
    if (!_results.IsValid)
    {
    foreach (ValidationResult vr in _results)
    {
        Response.Write(string.Format("错误位置:{0};原因:{1}<br>", vr.Key, vr.Message));
    }
    }
}

对于步骤2中提到的不便之处,幸好EnLib还提供了另一种方式,允许用户把验证规则放在配置文件中,步骤如下:

(a)先在web.config上右击,选择Edit Enterprise Libaray Configuration


(b)新建一个Validataion Application Block

(c)new-->Type-->Load From File... 选择实体类所在的DLL(如果实体类没有分层构架,先把项目编译一下,直接选择项目bin目录下的dll)

不过在使用过程中,发现一个bug:如果进行这一步前未编译生成dll,或者进到这一步后,又修改了实体类,配置工具好象反射时,始终不能刷新出最新的实体类,解决办法:关掉vs,重新打开再选择dll就正常了,不知道这是不是我机器上的个别现象

 

(d)new-->Rule Set --> new --> Choose Members-->选择要验证的成员

 

 

(e)添加验证规则

 

(f)设置Person的默认规则

Ok了,这下所有验证规则都被放到web.config中了,以下是web.config中的相关节点

<validation>
    <type defaultRuleset="Rule Set" assemblyName="ValidateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
      name="ValidateTest.Person">
      <ruleset name="Rule Set">
        <properties>
          <property name="Name">
            <validator negated="false" messageTemplate="请输入名字" messageTemplateResourceName=""
              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator, 
Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Not Null Validator" />
            <validator lowerBound="2" lowerBoundType="Ignore" upperBound="12"
              upperBoundType="Inclusive" negated="false" messageTemplate="名字必须是2到12个字符"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, 
Version=4.1.0.0, Culture=neutral"
              name="String Length Validator" />
          </property>
          <property name="Email">
            <validator pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
              options="None" patternResourceName="" patternResourceType=""
              messageTemplate="请输入有效的电子邮件地址" messageTemplateResourceName=""
              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RegexValidator, 
Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Regex Validator" />
          </property>
        </properties>
      </ruleset>
    </type>
  </validation>

以后要修改验证规则,只需要修改web.config即可,相对更灵活一些,但是这样有一个问题,随着要验证的类越来越多,web.config会越来越庞大,其实可以把验证规则单独放到另一个文件里,只需要在web.config上做些修改即可,注意下面的高亮部分

<configuration>
  <configSections>   
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral" />
    
  </configSections>
  <enterpriseLibrary.ConfigurationSource selectedSource="File Configuration Source">
    <sources>
      <add name="File Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common" filePath="config\validate.config"/>
    </sources>
  </enterpriseLibrary.ConfigurationSource>

上面第二段中的filePath=... 即表示把验证规则放到config目录下的validate.config中

 

接下来直接新建一个config目录,然后把validate.config放在里面就可以了,validate.config内容如下:

<configuration>
  <configSections>
    <section name="validation" type="Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.ValidationSettings, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral" />
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral" />
  </configSections>
  <validation>
    <type defaultRuleset="Rule Set" assemblyName="ValidateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
      name="ValidateTest.Person">
      <ruleset name="Rule Set">
        <properties>
          <property name="Email">
            <validator pattern="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
              options="None" patternResourceName="" patternResourceType=""
              messageTemplate="请输入正确的电子邮件地址" messageTemplateResourceName=""
              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RegexValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Regex Validator" />
          </property>
          <property name="Name">
            <validator lowerBound="2" lowerBoundType="Ignore" upperBound="12"
              upperBoundType="Inclusive" negated="true" messageTemplate="名字长度为2-12个字符"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="String Length Validator" />
          </property>
        </properties>
      </ruleset>
    </type>
  </validation>
</configuration>

最后再讲一点废话,QuickStarts中有一个关于asp.net的验证示例,里面的效果类似于常规的验证控件,不过是要页面提交后,由服务端再返回的,个人觉得这样效率太低,我倾向于先在页面上做客户端验证并给出相关出错提示,然后再到服务端代码里用文中所提的方法来验证,所以这个示例涉及的内容就不准备研究了,大家有兴趣的话,可以自行去look look这个例子

时间: 2024-12-21 20:20:11

Enterprise Library 4.1学习笔记5----实体验证程序块的相关文章

Enterprise Library 4.1学习笔记1----配置应用程序块(c/s和b/s均适用)

园子里TerryLee的Enterprise Library系列文章回顾与总结 http://www.cnblogs.com/Terrylee/archive/2006/08/01/464591.html已经写得很全面了,不过不是针对4.1版,一边看这一系列的文章学习,一边在4.1上摸索,准备写几篇学习笔记,今天先来认识Configuration Application Block(配置应用程序块) 参照TerryLee的文章,在4.1上怎么也找不到Configuration Applicati

Enterprise Library 4.1学习笔记3----安全应用程序块

打开\EntLib41Src\Quick Starts\Security\CS 先用aspnet_regsql.exe配置一个membership/role的基本数据库,然后修改下config文件中的连接字符串 运行后会发现界面上有一段文字 Note: Much of the functionality demonstated by this QuickStart was implemented in previous versions of Enterprise Library, but th

Enterprise Library 4.1学习笔记4----缓存应用程序块

缓存是个啥?以及为啥要用缓存就不废话了,主要是从实用角度讲下怎么用 1.先添加对Microsoft.Practices.EnterpriseLibrary.Caching.dll的引用 2.修改web.config文件,注意高度部分 <configSections>    ...    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Cachin

Enterprise Library 4.1学习笔记8----缓存应用程序块之FileDependency

写入缓存数据时如果使用了FileDependency方式,最终的效果会让缓存是否过期依赖于某一个具体的文件,只要这个文件没有修改,缓存一直 有效,反之如果这个文件被修改过了,则缓存立即过期. 个人认为,这种方式特别适合一些极少修改的数据(比如系统中的数据字典),而且相对用绝对时间(或是时间周期)让缓存过期,更能减轻数据 库压力,毕竟如果用时间做判断,时间点一到,就得重新从数据库里查询数据(不管数据有没有被修改). 应用场合:某些基础数据几乎极少修改,可能一个月还改不到一回,这时我们可以考虑Fil

Enterprise Library 4.1学习笔记6----加密应用程序块

学习这一块内容前,先得大概知道"哈希算法"和"对称加密算法"是咋回事儿. 不清楚的先去这里充电5分钟再回来 哈希算法------http://baike.baidu.com/view/273836.htm 对称加密算法--http://baike.baidu.com/view/7591.htm 使用步骤: 1.先添加Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll的引用 2.参照http:

Enterprise Library 4.1学习笔记2----数据访问程序块

Data Access Application Block 其实个人感觉相当于另一个版本的dbHelper 废话不多说,先看下如何使用: 1.引用Microsoft.Practices.EnterpriseLibrary.Data.dll(EL安装目录下的bin中就有) 2.配置web.config <configSections>...<section name="dataConfiguration" type="Microsoft.Practices.E

PowerDesigner16工具学习笔记-工具介绍

原文:PowerDesigner16工具学习笔记-工具介绍 1.初始界面 1.1 .浏览窗口:本地(Local)浏览窗口.知识库(Repository)浏览窗口       Local:用于显示本地模型       Repository:用于显示知识库模型 1.2 .输出窗口:用于显示操作过程中的相关信息.         General:用于显示建模过程中的相关信息         Check Model:用于显示模型检查过程中的相关信息         Generation:用于显示模型生成

黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block

原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(四) Logging Application Block 企业库日志应用程序模块工作原理图:        从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信息都可以在Category配置文件中反映出来,通过配置文件,调用LogWriter类的Writer方法,就可以将包含日志信息的LogEntr

Node.js 学习笔记之简介、安装及配置

 本文是Node.js学习笔记系列文章的第一篇,主要给大家讲解的是在Windows和Linux上安装Node.js的方法.软件安装版本以0.12.0为例.希望大家能够喜欢.     简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅