ITPub博客

首页 > 应用开发 > IT综合 > Enterprise Library 3.0 (3) Validation Application Block与ASP.NET集成

Enterprise Library 3.0 (3) Validation Application Block与ASP.NET集成

原创 IT综合 作者:tingantang 时间:2007-09-03 11:58:04 0 删除 编辑

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

[@more@]

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

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

public class Customer
{
private string firstName;
private string lastName;
private DateTime dateOfBirth;
private string email;
private int rewardPoints;

[StringLengthValidator(
1, 50, Ruleset = "RuleSetA", MessageTemplate="First Name must be between 1 and 50 characters long")]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}


[StringLengthValidator(
1, 50, Ruleset = "RuleSetA", MessageTemplate = "Last Name must be between 1 and 50 characters long")]
public string LastName
{
get { return lastName; }
set { lastName = value; }
}


[RelativeDateTimeValidator(
-120, DateTimeUnit.Year, -18, DateTimeUnit.Year, Ruleset = "RuleSetA", MessageTemplate="Must be 18 years old")]
public DateTime DateOfBirth
{
get { return dateOfBirth; }
set { dateOfBirth = value; }
}


[RegexValidator(
@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*", Ruleset = "RuleSetA")]
public string Email
{
get { return email; }
set { email = value; }
}


[Int32RangeValidator(
0, 1000000, Ruleset = "RuleSetA", MessageTemplate = "Rewards points cannot exceed 1,000,000")]
public int RewardPoints
{
get { return rewardPoints; }
set { rewardPoints = value; }
}

}

2

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

代码如下:

.在页面上需要验证的地方添加PropertyProxyValidator控件,基本的属性设置如下:.在这里有两个验证器用到了OnValueConvert事件,对应的CS代码如下:.运行后,输入错误的数据如下图所示:

<div>
<h3>
Validation Application Block: ASP.NET Integration QuickStart
h3>

<table>
<tr>
<td style="width: 100px">
First Name:
td>
<td style="width: 508px">
<asp:TextBox ID="firstNameTextBox" runat="server" Width="235px">asp:TextBox> 
<br />
td>
tr>
<tr>
<td style="width: 100px; height: 21px">
Last Name:
td>
<td style="width: 508px; height: 21px">
<asp:TextBox ID="lastNameTextBox" runat="server" Width="235px">asp:TextBox><br />
td>
tr>
<tr>
<td style="width: 100px">
Date Of Birth:
td>
<td style="width: 508px">
<asp:TextBox ID="dateOfBirthTextBox" runat="server">asp:TextBox><br />
td>
tr>
<tr>
<td style="width: 100px">
E-mail:
td>
<td style="width: 508px">
<asp:TextBox ID="emailTextBox" runat="server" Width="235px">asp:TextBox><br />
td>
tr>
<tr>
<td style="width: 100px; height: 25px;">
Rewards Points:
td>
<td style="width: 508px; height: 25px;">
<asp:TextBox ID="rewardsPointsTextBox" runat="server">asp:TextBox><br />
td>
tr>
<tr>
<td style="width: 100px">
td>
<td style="width: 508px">
<asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="submitButton_Click" /> 
<asp:Label ID="validationResultsLabel" runat="server">asp:Label>td>
tr>
table>
div>

4

<cc1:propertyproxyvalidator id="firstNameValidator" runat="server"

ControlToValidate
="ContolToValidate"

PropertyName
="PropertyName"

RulesetName
="RuleSetName"

SourceTypeName
="ValidationAspNetQuickStart.Customer">

cc1:propertyproxyvalidator>

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

<div>
<h1>
Validation Application Block: ASP.NET Integration QuickStart
h1>

<table>
<tr>
<td style="width: 100px">
First Name:
td>
<td style="width: 508px">
<asp:TextBox ID="firstNameTextBox" runat="server" Width="235px">asp:TextBox> 
<br />
<cc1:propertyproxyvalidator id="firstNameValidator" runat="server"
ControlToValidate
="firstN
ameTextBox"

PropertyName
="FirstName"
RulesetName
="RuleSetA"
SourceTypeName
="ValidationAspNetQuickStart.Customer">
cc1:propertyproxyvalidator>
td>
tr>
<tr>
<td style="width: 100px; height: 21px">
Last Name:
td>
<td style="width: 508px; height: 21px">
<asp:TextBox ID="lastNameTextBox" runat="server" Width="235px">asp:TextBox><br />
<cc1:PropertyProxyValidator ID="lastNameValidator" runat="server" ControlToValidate="lastNameTextBox"
PropertyName
="LastName" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer">cc1:PropertyProxyValidator>td>
tr>
<tr>
<td style="width: 100px">
Date Of Birth:
td>
<td style="width: 508px">
<asp:TextBox ID="dateOfBirthTextBox" runat="server">asp:TextBox><br />
<cc1:PropertyProxyValidator ID="dateOfBirthValidator" runat="server" ControlToValidate="dateOfBirthTextBox"
OnValueConvert
="dateOfBirthValidator_ValueConvert" PropertyName="DateOfBirth"
RulesetName
="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer">cc1:PropertyProxyValidator>td>
tr>
<tr>
<td style="width: 100px">
E-mail:
td>
<td style="width: 508px">
<asp:TextBox ID="emailTextBox" runat="server" Width="235px">asp:TextBox><br />
<cc1:PropertyProxyValidator ID="emailValidator" runat="server" ControlToValidate="emailTextBox"
PropertyName
="Email" RulesetName="RuleSetA" SourceTypeName="ValidationAspNetQuickStart.Customer">cc1:PropertyProxyValidator>td>
tr>
<tr>
<td style="width: 100px; height: 25px;">
Rewards Points:
td>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10771986/viewspace-967739/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论