2

我有一个带有 2 个用户控件 (.ascx) 的 ASP.NET 2.0 网页。每个 UserControl 都包含一堆验证器。在页面上放置 ValidationSummary 将显示两个 UserControl 的所有验证错误。在每个 UserControl 中放置一个 ValidationSummary 将显示两个控件的所有错误两次。

我想要的是每个 UserControl 的 ValidationSummary,只显示该 UserControl 上的错误。

我试图通过在每个用户控件上动态设置验证器的 ValidationGroup 属性来解决这个问题。这样每个验证摘要应该只显示其用户控件的错误。我用过这段代码:

foreach (Control ctrl in this.Controls)
{
    if (ctrl is BaseValidator)
    {
        (ctrl as BaseValidator).ValidationGroup = this.ClientID;
    }
}
ValidationSummary1.ValidationGroup = this.ClientID;

然而,这似乎禁用了客户端和服务器端验证,因为提交表单时不会发生验证。

帮助?

4

2 回答 2

4

导致表单提交的控件(即 Button 控件)必须与任何 ValidationSummary 和 *Validator 控件属于同一验证组。

于 2008-09-26T10:01:25.630 回答
2

如果您使用 ValidationGroups,则仅当导致回发的控件分配给相同的 ValidationGroup 时才会发生验证。

如果您想使用单个控件回发,您仍然可以这样做,但您需要显式调用 Page.Validate 方法。

Page.Validate(MyValidationGroup1);
Page.Validate(MyValidationGroup2);
if(Page.IsValid)
{
    //do stuff
}

建议:为什么不在用户控件上公开一个名为 ValidationGroup 的公共属性?在 setter 中,您可以为每个验证器显式设置验证组。您也可以使用您的循环,但明确设置每个验证器会更有效。这可能会提高使用用户控件的代码的可读性。

于 2008-09-26T12:27:11.353 回答