【问题标题】:Checking if a ValidationGroup is valid from code-behind从代码隐藏检查 ValidationGroup 是否有效
【发布时间】:2010-11-14 20:03:02
【问题描述】:

是否有我可以调用的方法来检索特定 ValidationGroup 是否有效的布尔值? 我不想实际显示验证消息或摘要 - 我只想知道它是否有效。

类似:

Page.IsValid("MyValidationGroup")

【问题讨论】:

    标签: asp.net validation


    【解决方案1】:

    试试这个:

    Page.Validate("MyValidationGroup");
    if (Page.IsValid) 
    {
        //Continue with your logic
    }
    else
    {
        //Display errors, hide controls, etc.
    }
    

    不完全是你想要的,但希望接近。

    【讨论】:

    • Page.Validate 会导致我的 ValidationSummary 显示吗?
    • 如果您想以这种方式使用此解决方案,您需要以编程方式禁用/隐藏验证摘要。
    【解决方案2】:

    您是否尝试过使用Page.Validate(string) 方法?根据文档,它看起来可能是您想要的。

    Page.Validate("MyValidationGroup");
    if (Page.IsValid)
    {
        // your code here.
    }
    

    请注意,同样导致回发的控件上的验证器也会触发。从 MSDN 文章中截取...

    Validate 方法验证 指定的验证组。后 在 a 上调​​用 Validate 方法 验证组,IsValid 方法 仅当两者都返回 true 指定的验证组和 控件的验证组 导致页面被发布到 服务器有效。

    【讨论】:

    • 值得一提的是,这将在验证失败时显示验证消息。
    【解决方案3】:
    protected bool IsGroupValid(string sValidationGroup)
    {
       foreach (BaseValidator validator in Page.Validators)
       {
          if (validator.ValidationGroup == sValidationGroup)
          {
             bool fValid = validator.IsValid;
             if (fValid)
             {
                validator.Validate();
                fValid = validator.IsValid;
                validator.IsValid = true;
             }
             if (!fValid)
                return false;
          }
    
       }
       return true;
    }
    

    【讨论】:

    • +1 您也可以使用Page.GetValidators("<your group name>"),这会稍微简化代码。
    【解决方案4】:

    如果任何已验证的验证组无效,Page.IsValid 将为 false。如果您想验证组并查看状态,请尝试:

        protected bool IsGroupValid(string sValidationGroup)
        {
            Page.Validate(sValidationGroup);
            foreach (BaseValidator validator in Page.GetValidators(sValidationGroup))
            {
                if (!validator.IsValid)
                {
                    return false;
                }
            }
            return true;
        }
    

    【讨论】:

      【解决方案5】:
      var isValidGroup = Page
                          .GetValidators(sValidationGroup)
                          .Cast<IValidator>()
                          .All(x => x.IsValid);
      

      【讨论】:

        【解决方案6】:

        Pavel 的答案有效,但不是最简单的。以下是我的解决方法:

        protected Boolean validateGroup(String validationGroupName) {
                Boolean isGroupValid = true;
        
                foreach (BaseValidator validatorControl in Page.GetValidators(validationGroupName)) {
                    validatorControl.Validate();
        
                    if (!validatorControl.IsValid)
                        isGroupValid = false;
                }
        
                if (!isGroupValid)
                    return false;
                else
                    return true;
            }
        

        【讨论】:

          猜你喜欢
          • 2021-05-11
          • 2019-01-03
          • 1970-01-01
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          • 2011-01-04
          • 2011-05-22
          • 1970-01-01
          相关资源
          最近更新 更多