2011-06-22 25 views
5

我在頁面上有兩個用戶控件實例。兩者都有字段和一個提交按鈕。用戶控制驗證組問題

我已經在字段和驗證器上設置了驗證組,但由於某些原因驗證了兩個用戶控件的驗證器觸發。

+0

你能告訴我們你的代碼嗎? – Teletha

回答

3

您可以在您的UserControl中公開您將從頁面設置的屬性ValidationGroup。此值應存儲在ViewState中,以便UserControl的每個實例都將獲得不同的ValidationGroups(如果您的頁面分配不同)。

例如:

Public Property ValidationGroup() As String 
Get 
    Return CStr(ViewState("ValidationGroup")) 
End Get 
Set(ByVal value As String) 
    SetValidationGroupOnChildren(Me, value) 
    ViewState("ValidationGroup") = value 
End Set 
End Property 

Private Sub SetValidationGroupOnChildren(ByVal parent As Control, ByVal validationGroup As String) 
    For Each ctrl As Control In parent.Controls 
     If TypeOf ctrl Is BaseValidator Then 
      CType(ctrl, BaseValidator).ValidationGroup = validationGroup 
     ElseIf TypeOf ctrl Is IButtonControl Then 
      CType(ctrl, IButtonControl).ValidationGroup = validationGroup 
     ElseIf ctrl.HasControls() And ctrl.Visible = True Then 
      SetValidationGroupOnChildren(ctrl, validationGroup) 
     End If 
    Next 
End Sub 

如果您在用戶控件需要不同的ValidationGroups上述遞歸函數將無法正常工作,那麼你可以手動指定它從代碼隱藏。例如,通過將UserControl的ID(可能就足夠了)或ClientID放在相應控件的ValidationGroup屬性前面。你可以稱之爲功能的好地方是PreRender

+0

你是男人! – Burt

7

此方法也適用:

Dim valGroup = String.format("{0}-validation", Guid.NewGuid()) 

rfv001.ValidationGroup = valGroup 
rfv002.ValidationGroup = valGroup 
rfv003.ValidationGroup = valGroup 
rfv004.ValidationGroup = valGroup 
rfv005.ValidationGroup = valGroup 

btnSubmit.ValidationGroup = valGroup 

您只需要爲手動ValidationGroup設置的值。

+0

我更喜歡這個解決方案。謝謝 – kaiyaq