用户控件验证组问题

5

我在页面上有两个用户控件实例。它们都有字段和一个提交按钮。

我已经在字段和验证器上设置了验证组,但是由于某种原因,在验证这两个用户控件时,它们的验证器都会触发。


请问您能否展示一下您的代码? - Teletha
2个回答

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的值即可。

我更喜欢这个解决方案。谢谢。 - user2233219

3
您可以在您的用户控件中暴露一个属性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中调用此函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接