65.9K
CodeProject 正在变化。 阅读更多。
Home

在运行时添加 ASP.NET 验证

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (6投票s)

2005年3月4日

2分钟阅读

viewsIcon

85538

downloadIcon

665

一篇描述如何在运行时将错误添加到验证摘要的文章

Runtime validation

引言

本文最初发表于 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 表单中,我现在将

  1. 将我的提交按钮上的 CausesValidation 设置为 false。
  2. 验证我的对象。
  3. 对于遇到的每个错误,调用 MultiValidator1.AddError()
  4. 调用 Page.Validate();
  5. 像往常一样检查 Page.IsValid
使用 ValidationSummary,我可以将损坏的约束显示给用户进行修正。

使用代码

要使用该代码,只需将提供的两个 CS 文件编译成 Web 控件程序集,然后将 MultiValidator 放到您的网页上。 错误可以像这样添加

  if (SomeUnusualCondition)
    multiValidator1.AddError("Something unusual is wrong");

© . All rights reserved.