2009-07-28 91 views
23

有沒有我可以調用的方法檢索布爾值的一個特定的驗證組是否有效? 我不想實際顯示驗證消息或摘要 - 我只是想知道它是否有效。檢查驗證組是否有效從代碼隱藏

喜歡的東西:

Page.IsValid("MyValidationGroup") 

回答

14
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; 
} 
4

試試這個:

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

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

+0

那麼將Page.Validate導致我的ValidationSummary顯示? – 2009-07-28 19:24:59

+0

如果您想以此方式使用此解決方案,則需要以編程方式禁用/隱藏驗證摘要。 – 2009-07-28 19:26:11

32

您是否嘗試過使用Page.Validate(string)方法?基於文檔,它看起來可能是你想要的。

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

請注意,控件上也會導致回發的驗證器也會觸發。從MSDN文章中剪下...

驗證方法驗證指定的驗證組爲 。 呼籲在 驗證組的驗證方法後,IsValid的方法 將返回true只有兩個 指定驗證組和對照的 驗證組 導致網頁被髮布到 服務器是有效的。

+0

值得一提的是,這將在失敗的驗證中顯示驗證消息。 – modiX 2014-08-13 10:25:24

3

Page.IsValid將是錯誤的,如果任何驗證的驗證組是無效的。如果您想驗證一個組,查看狀態,請嘗試:

protected bool IsGroupValid(string sValidationGroup) 
    { 
     Page.Validate(sValidationGroup); 
     foreach (BaseValidator validator in Page.GetValidators(sValidationGroup)) 
     { 
      if (!validator.IsValid) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
6
var isValidGroup = Page 
        .GetValidators(sValidationGroup) 
        .Cast<IValidator>() 
        .All(x => x.IsValid); 
1

帕維爾的答案的作品,但不是簡單的。下面是我如何解決它:

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; 
    }