我在页面上有两个用户控件实例。它们都有字段和一个提交按钮。
我已经在字段和验证器上设置了验证组,但是由于某种原因,在验证这两个用户控件时,它们的验证器都会触发。
我在页面上有两个用户控件实例。它们都有字段和一个提交按钮。
我已经在字段和验证器上设置了验证组,但是由于某种原因,在验证这两个用户控件时,它们的验证器都会触发。
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
的值即可。ValidationGroup
,并从页面中设置它。这个值应该存储在ViewState中,这样每个用户控件的实例都会获得不同的验证组(如果您的页面分配了不同的验证组)。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,上述递归函数将无法工作,那么你可以在代码后端手动分配它。例如,通过将用户控件的ID(可能足够)或ClientID放在相应控件的ValidationGroup属性前面。一个很好的地方是在PreRender
中调用此函数。