Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成

摘要:也许大家都已经习惯了使用ASP.NET中的验证控件进行数据有效性的验证,但是验证控件的验证无法与我们的自定义的实体类结合起来,两者属于不同层面的验证。在Enterprise Library 3.0中有了Validation Application Block,可以轻松的实现页面验证与类验证的结合。

 

1.编写实体类,本文我使用Enterprise Library 3.0 QuickStarts中的例子,采用Atteribute验证的方式(采用配置文件来实现也是一样的),分别设置验证规则集合、错误信息提示等属性,代码如下:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成public class Customer
}

2.添加PropertyProxyValidator控件。在工具箱中添加新项,选择Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet,默认的安装路径为C:\Program Files\Microsoft Enterprise Library 3.0 - January 2007 CTP\Bin,添加完成后可以在工具箱中看到PropertyProxyValidator控件。

3.编写ASPX页面,如下图所示:

代码如下:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成<div>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    
<h3>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        Validation Application Block: ASP.NET Integration QuickStart
</h3>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        
<table>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    First Name:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="firstNameTextBox" runat="server" Width="235px"></asp:TextBox>&nbsp;
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px; height: 21px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Last Name:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px; height: 21px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="lastNameTextBox" runat="server" Width="235px"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Date Of Birth:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="dateOfBirthTextBox" runat="server"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    E-mail:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="emailTextBox" runat="server" Width="235px"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px; height: 25px;">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Rewards Points:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px; height: 25px;">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="rewardsPointsTextBox" runat="server"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="submitButton_Click" />&nbsp;
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:Label ID="validationResultsLabel" runat="server"></asp:Label></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        
</table>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
</div>

4.在页面上需要验证的地方添加PropertyProxyValidator控件,基本的属性设置如下:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成<cc1:propertyproxyvalidator id="firstNameValidator" runat="server" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    ControlToValidate
="ContolToValidate" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    PropertyName
="PropertyName" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    RulesetName
="RuleSetName" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    SourceTypeName
="ValidationAspNetQuickStart.Customer">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
</cc1:propertyproxyvalidator>

其中ControlToValidate指定对应的需要验证的控件IDPropertyName指定在实体类中的属性名,RulesetName指定验证规则的名称,SourceTypeName指定实体类型名,当然了你也可以像验证控件一样通过Display属性来指定验证信息的显示方式:NoneStaticDynamicPropertyProxyValidator还有一个很重要的事件OnValueConvert,在事件可以通过做类型转换根据是否抛出异常来判断输入是否正确,以及设置验证提示信息等。添加完PropertyProxyValidator后代码如下:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成<div>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    
<h1>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        Validation Application Block: ASP.NET Integration QuickStart
</h1>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成    
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        
<table>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    First Name:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="firstNameTextBox" runat="server" Width="235px"></asp:TextBox>&nbsp;
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<cc1:propertyproxyvalidator id="firstNameValidator" runat="server" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    ControlToValidate
="firstN
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    ameTextBox"
 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    PropertyName
="FirstName" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    RulesetName
="RuleSetA" 
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    SourceTypeName
="ValidationAspNetQuickStart.Customer">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
</cc1:propertyproxyvalidator>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px; height: 21px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Last Name:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px; height: 21px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="lastNameTextBox" runat="server" Width="235px"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<cc1:PropertyProxyValidator ID="lastNameValidator" runat="server" ControlToValidate="lastNameTextBox"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                        PropertyName
="LastName" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Date Of Birth:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="dateOfBirthTextBox" runat="server"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<cc1:PropertyProxyValidator ID="dateOfBirthValidator" runat="server" ControlToValidate="dateOfBirthTextBox"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                        OnValueConvert
="dateOfBirthValidator_ValueConvert" PropertyName="DateOfBirth"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                        RulesetName
="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    E-mail:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="emailTextBox" runat="server" Width="235px"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<cc1:PropertyProxyValidator ID="emailValidator" runat="server" ControlToValidate="emailTextBox"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                        PropertyName
="Email" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer"></cc1:PropertyProxyValidator></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px; height: 25px;">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    Rewards Points:
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px; height: 25px;">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:TextBox ID="rewardsPointsTextBox" runat="server"></asp:TextBox><br />
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<cc1:PropertyProxyValidator ID="rewardPointsValidator" runat="server" ControlToValidate="rewardsPointsTextBox"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                         PropertyName
="RewardPoints"
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                        RulesetName
="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer" OnValueConvert="rewardsPointsValidator_ValueConvert"></cc1:PropertyProxyValidator></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
<tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 100px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
</td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                
<td style="width: 508px">
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="submitButton_Click" />&nbsp;
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成                    
<asp:Label ID="validationResultsLabel" runat="server"></asp:Label></td>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成            
</tr>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成        
</table>
Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成
</div>

5.在这里有两个验证器用到了OnValueConvert事件,对应的CS代码如下:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成protected void rewardsPointsValidator_ValueConvert(object sender, Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet.ValueConvertEventArgs e)
}

6.运行后,输入错误的数据如下图所示:

Enterprise Library 3.0体验(4):Validation Application Block与ASP.NET的集成

关于Validation Application BlockASP.NET的集成就简单得介绍到这儿。

相关文章: