Using the built in .NET validation, you can assign a 'validation group' to a set of validation controls, submit buttons and validation summary.

This creates a separation between different sets of controls on the page, so that only the relevant controls are validated for a specific submit button.

When you design your application as separate user control components, you may want to set a different validation group on the validators of the user control, depending on the context.

To allow this, I have exposed a 'ValidationGroup' property on the user control. This subsequently makes a recursive to all its child controls to set the validation group of all the validators.

This way, you can set the validation group of the user control instance as you would any other control and it will assign all of its contained validators to that group.


Public Property ValidationGroup() As String
  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
End Sub