在运行时添加 ASP.NET 验证






4.64/5 (6投票s)
2005年3月4日
2分钟阅读

85538

665
一篇描述如何在运行时将错误添加到验证摘要的文章
引言
本文最初发表于 www.HowToDoThings.com
本文解释了如何在运行时向 ValidationSummary
添加错误消息,并使这些消息的添加将 Page.IsValid
设置为 False
。 当您在运行时才知道应该对 Web 表单应用哪些约束时,或者当您想根据与 Web 控件不直接相关的约束进行验证时,此技术非常有用。
在编写 www.howtodothings.com 时,其中一个要求是能够使用 OCL 对对象约束进行建模,然后将当前页面与这些约束进行验证。
普通验证器的缺点是它们被设计用来验证单个控件,而不是对象上的一系列约束。 我采用的方法是创建一个可以放置在任何 Web 表单上的验证器,并根据需要添加任意数量的错误。
第一步是创建一个支持 IValidator
的 Web 控件
public class MultiValidator : WebControl, IValidator
{
}
然后,我添加了一个 ArrayList 来保存错误字符串,以及一个添加错误的方法。
private ArrayList Errors = new ArrayList();
public void AddError(string message)
{
Errors.Add(message);
}//AddError
当 ASP.NET 验证页面时,它会枚举其自身的 Validators 属性中的所有 IValidator
,并调用 IValidator.Validate()
。 为了确定页面是否有效,它会检查 IValidator.IsValid
。
为了在运行时添加自定义错误消息,我决定创建一个静态验证器类,该类始终从 IsValidator.IsValid
返回“false”。 对于 MultiValidator
中的每个错误消息,我都可以简单地创建这些验证器的一个实例。
[ToolboxItem(false)]
internal class StaticValidator : IValidator
{
private string errorMessage;
#region IValidator
void IValidator.Validate()
{
}//Validate
bool IValidator.IsValid
{
get { return false; }
set { }
}//IsValid
#endregion
public string ErrorMessage
{
get { return errorMessage; }
set { errorMessage = value; }
}//ErrorMessage
}
现在 StaticValidator
已经编写完毕,我需要做的就是将所需的 IValidator
实现添加到我的 MultiValidator 类中。
#region IValidator
void IValidator.Validate()
{
isValid = (Errors.Count == 0);
foreach(string error in Errors)
{
StaticValidator validator = new StaticValidator();
validator.ErrorMessage = error;
Page.Validators.Add(validator);
Validators.Add(validator);
}//foreach errors
}//Validate
bool IValidator.IsValid
{
get { return isValid; }
set { isValid = value; }
}//IsValid
#endregion
在 Web 表单中,我现在将
- 将我的提交按钮上的
CausesValidation
设置为 false。 - 验证我的对象。
- 对于遇到的每个错误,调用
MultiValidator1.AddError()
。 - 调用
Page.Validate();
- 像往常一样检查
Page.IsValid
。
使用代码
要使用该代码,只需将提供的两个 CS 文件编译成 Web 控件程序集,然后将 MultiValidator 放到您的网页上。 错误可以像这样添加
if (SomeUnusualCondition)
multiValidator1.AddError("Something unusual is wrong");