2008-09-26 24 views
2

我有一個ASP.NET 2.0網頁與2個用戶控件(.ascx)。每個UserControl都包含一堆驗證器。在頁面上放置ValidationSummary將顯示UserControl的所有驗證錯誤。在每個UserControl中放置ValidationSummary將顯示兩個控件的所有錯誤兩次。我如何設置ValidationGroup動態

我想要的是每個UserControl的ValidationSummary,只顯示該UserControl上的錯誤。

我試着通過在每個usercontrol dynamicaly上設置驗證器的ValidationGroup屬性來解決這個問題。這樣每個驗證摘要應該只顯示其UserControl的錯誤。我用這個代碼:

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

然而,這似乎禁用這兩個客戶方和服務器端驗證,因爲提交表單時出現任何驗證。

幫助?

回答

2

如果使用ValidationGroups,則只有在引發回發的控件分配給相同的ValidationGroup時纔會進行驗證。

如果您想使用單個控件回發,您仍可以執行此操作,但您需要顯式調用Page.Validate方法。

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

建議: 你爲什麼不叫暴露在的ValidationGroup您的用戶控件的公共屬性? 在設置器中,您可以明確設置每個驗證器的驗證組。您也可以使用循環,但明確設置每個驗證器會更有效。這可能會改善使用用戶控件的代碼的可讀性。

4

導致您的表單提交(即Button控件)的控件必須是任何ValidationSummary和* Validator控件的同一個驗證組的一部分。