Haoest
Haoest

Reputation: 13906

How to get all validators in the page?

I thought RequiredFieldValidators, CustomValidators, and all other validators would live in Controls collection. Basically I have a User Control that has a number of validators in it, and I would like to get a handle on them to do stuff.

Page.Validators seem to return a list of IValidator objects, which are not what I am looking for.

Where can I get the list of all validators in a User Control?

Upvotes: 3

Views: 1720

Answers (2)

RandomUs1r
RandomUs1r

Reputation: 4190

Since you're using ASP.NET validation controls you might be looking for a validation summary:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.validationsummary%28v=vs.100%29.aspx

You can do quite a bit with it fitting most usage scenarios, here's a simple example:

http://asp-net-example.blogspot.com/2008/10/validationsummary-example-how-to-use.html

Alternatively, Page.Validators would provide direct access.

Upvotes: 0

Brian Mains
Brian Mains

Reputation: 50728

The Page.Validators collection is your best bet; all validators implement IValidator, and in turn, BaseValidator, so you can use this do to that. Since the validator is a control, it's parent reference trail will contain a reference to the user control it lives in. It may require you doing something like:

if (validator.Parent.Parent.Parent.Parent is UserControl) { }

But that is the only way to figure that out. So a combination of Page.Validators, and checking the parent control tree is the only way, unless you look for specific validation groups that a validator implements, which also is another way (a property of BaseValidator, so you'll have to do a type check and cast.

There is one last potential option; you can override AddedControl, which executes on every control add, and check if the control is a validator, and then keep that control in a local collection like:

private List<BaseValidator> _vals = ..;

protected overrides void AddedControl(Control control, int index) {
   if (control is BaseValidator)
     _vals.Add((BaseValidator)control);
}

Then you would know which controls belong to that user control. I've done this with custom controls, not anything with user controls, so may not work exactly as I mentioned...

Upvotes: 2

Related Questions