【问题标题】:User Control validation group issue用户控制验证组问题
【发布时间】:2011-09-20 13:45:39
【问题描述】:

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

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

【问题讨论】:

  • 您能告诉我们您的代码吗?

标签: asp.net validation user-controls


【解决方案1】:

此方法也有效:

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

【讨论】:

  • 我更喜欢这个解决方案。谢谢
【解决方案2】:

您可以在您的用户控件中公开一个属性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

如果您在 UserControl 中需要不同的 ValidationGroups,上述递归函数将不起作用,那么您可以从代码隐藏中手动分配它。例如,将 UserControl 的 ID(可能就足够了)或 ClientID 放在相应控件的 ValidationGroup 属性之前。可以调用此函数的好地方是PreRender

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多