0

在将模块/控件添加到具有表单验证的 ASP.NET CMS 中的网页时,我遇到了一个问题,它将验证页面上的所有表单,因为 ValidationGroup 具有相同的名称。如何用函数解决这个问题?

4

1 回答 1

0

我想出了以下解决方案:

遍历某个占位符以将唯一的 ValidationGroup 名称分配给每个表单的函数。

    Public Shared Sub SetValGroupControls(PageModule As Control, valGroupName As String)
      For Each ctrl As Control In PageModule.Controls
        If TypeOf ctrl Is RequiredFieldValidator Then
          DirectCast(ctrl, RequiredFieldValidator).ValidationGroup = valGroupName
        ElseIf TypeOf ctrl Is RegularExpressionValidator Then
          DirectCast(ctrl, RegularExpressionValidator).ValidationGroup = valGroupName
        ElseIf TypeOf ctrl Is CompareValidator Then
          DirectCast(ctrl, CompareValidator).ValidationGroup = valGroupName
        ElseIf TypeOf ctrl Is CustomValidator Then
          DirectCast(ctrl, CustomValidator).ValidationGroup = valGroupName
        ElseIf TypeOf ctrl Is RangeValidator Then
          DirectCast(ctrl, RangeValidator).ValidationGroup = valGroupName
        ElseIf TypeOf ctrl Is Button Then
          DirectCast(ctrl, Button).ValidationGroup = valGroupName
        End If

        If ctrl.Controls.Count > 0 Then
          SetValGroupControls(ctrl, valGroupName)
        End If

      Next
    End Sub

其中 PageModule 代表包含验证控件的占位符(以避免遍历页面上的所有控件),而 ValGroupName 代表将被分配为名称的唯一字符串。

假设我的验证控件包含在一个名为“plhMyForm”的占位符中,您可以像这样调用该函数:

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

上面将创建一个独特的字符串,如: 24ad5ae3-fead-4a6f-98f3-dffcd2e815ba-validation

当然,您可以使用自己独特的字符串生成。

现在您可以将 ValidationGroup 名称留空,该函数会为您分配一个。这样,同一页面上需要验证的每个表单都将单独验证自己。

于 2013-01-29T11:27:21.100 回答