本文演示Enterprise Library – Validation Application Block 验证管理模块的使用,练习创建多个Rule Sets在不同场景下使用不同的Validation规则来进行数据验证。本文由
http://blog.entlib.com 开源ASP.NET博客平台小组根据EntLib HOL手册编译提供,欢迎交流。
练习六:创建并使用多个Rule Sets
下面的操作可以在练习五的基础上继续操作,或者直接打开\Enterprise Library 4.1 HOL\CS\Validation\Labs\Lab06\Before目录下的ValidationHOL.sln项目文件。该Solution包含有两个项目,分别为ValidationHOL.BusinessLogic和ValidationHOL。
1. 创建和配置一个新的、非默认的Rule Set
(1)使用EntLib的配置管理工具打开app.config文件,右键点击Customer节点,选择 New | Rule Set,创建一个新的Rule Set,命名为Alternative。
(2)选择Alternative节点,和上一篇操作一样,这里只添加2个属性,分别为FirstName和LastName。
设置FirstName的String Length Validator的相关属性:
LowerBound=1
LowerBoundType=Inclusive
UpperBound=20
继续设置LastName的DomainValidator的相关属性,选择Domain属性,点击相应的按钮,弹出DomainValue Collection Editor对话框。
在该对话框中,分别添加EntLib, Smith, Jones, Doe等等四个DomainValue,这样限定该属性必须输入指定的属性值,如下图所示。记得操作完成后,需要保存配置文件。
2. 添加一个CheckBox到UI界面上,用来选择使用哪一个Rule Set
打开MainForm界面,添加一个新的CheckBox,设置如下属性:
Name = alternativeValidation
Text = alternative
如下图所示。
3. 更新MainForm类中的acceptButton_Click方法,由CheckBox决定采用哪一个Rule Set对Customer对象实例进行验证。具体代码如下。
private void acceptButton_Click(object sender, EventArgs e)
{
Customer customer = new Customer
{
FirstName = firstNameTextBox.Text,
LastName = lastNameTextBox.Text,
SSN = ssnTextBox.Text,
Address = new Address
{
StreetAddress = streetAddressTextBox.Text,
City = cityTextBox.Text,
State = stateComboBox.Text,
ZipCode = zipCodeTextBox.Text
}
};
ValidationResults results =
this.alternativeValidation.Checked
? Validation.Validate(customer, "Alternative")
: Validation.Validate(customer);
if (!results.IsValid)
{
StringBuilder builder = new StringBuilder();
builder.AppendLine("Customer is not valid:");
foreach (ValidationResult result in results)
{
builder.AppendLine(
string.Format(
CultureInfo.CurrentCulture,
"{0}: {1}",
result.Key,
result.Message));
}
MessageBox.Show(
this,
builder.ToString(),
"Error",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
return;
}
MessageBox.Show(
this,
"Processing customer '" + customer.FirstName + "'",
"Working",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
4. 运行范例程序,检查是否使用了不同的Rule Set
如果不选择CheckBox,将采用上一节定义的Default Rule Set对Customer对象实例进行验证,结果和上一节是一样的。
如果选择Alternative CheckBox,将采用本节新定义的alternative Rule Set,弹出的消息对话框如下图所示。
参考文档:
Validation Application Block Hands-On Labs for Enterprise Library