【问题标题】:How can I set the ValidationGroup dynamically如何动态设置 ValidationGroup
【发布时间】:2010-09-13 09:40:29
【问题描述】:

我有一个带有 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;

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

帮助?

【问题讨论】:

    标签: asp.net validation validationsummary


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-12
        • 2018-03-15
        • 1970-01-01
        相关资源
        最近更新 更多