0

ValidationGroup の名前が同じであるため、ページ上のすべてのフォームを検証するフォーム検証を持つ ASP.NET CMS の Web ページにモジュール/コントロールを追加するときに問題が発生します。関数でこれを解決する方法は?

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 に答える