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