Selective Validation Using ASP.NET Validation Controls
Introduction
ASP.NET validation controls allow you to quickly validate your forms.This works well as long as you want to validate entire form values at atime. However, if you want to validate the form in ‘parts‘ then thevalidation controls pose certain problems. In this article I will showyou how to selectively call the validation controls.How Validation Controls Work?
Before we begin examining ourcode it is important to know how validation controls work. By defaultvalidation controls work at client side (EnableClientScript property).They emit JavaScript in the browser which does the task of validationbefore the form is posted back. If any validation fails the form is notposted. If you set EnableClientScript property to false then the clientside javascript is not emitted. When you submit the form it is postedback and the Validate method of the Page class is called (you can alsocall this method yourself). Based of the validation results errors aredisplayed as in previous case. You can also check IsValid property ofPage or the validation control under consideration to know whetherinput is valid or not. You can access individual validation control bytheir IDs (just like any other server control) or throughPage.Validators collection.Selective Validation
It must be clear to you that entire pageor web form is validated at once. Consider an example where you havetwo text boxes. One for entering Name and other for entering Age. Ifage is entered it must be between 18 to 100. Assume that these entriesare independent of each other. That is irrespective of whether Age isentered or not you need to process Name and vice a versa. This meansthat we want to selectively validate our page. Not all validations needto be fired at once. As a first step you may attachRequiredFieldValidator to the Name and Age text boxes.In addition you may also attach a RangeValidator to the Age text box.If you set EnableClientScript property of all the validation controlsto true (default) then your form will not be posted unless you enterAge. This is certainly not what we want. Also if you setEnableClientScript property to false then the form is posted back tothe sever but it always shows error message for Age text box. This isalso not a good idea. In the following section we will see how to solveabove problem. Note that as far as possible you should stick to clientside validation as it reduces server round trips. Since our problem isa special case we are disabling the client script.Solution
We will now develop a sample web form to illustrate our solution. The form contains following controls: - TextBox1 to enter Name
- TextBox2 to enter Age
- Button1 to process value entered in TextBox1
- Button2 to process value entered in TextBox2
- RequiredFieldValidator (namevalidator) to ensure that user enters value in TextBox1
- RequiredFieldValidator (agerequiredvalidator) to ensure that user enters value in TextBox2
- RangeValidator (agevalidator) to ensure that user enters value in TextBox2 in the range of 18-100.
Once the form is ready you need to set various validationcontrols appropriately to validate respective text boxes (i.e. setproperties such as ControlToValidate, Text, ErrorMessage, MinimumValueand MaximumValue). Then set EnableClientScript property of ALLvalidation controls to false. You can easily do that in VS.NETproperties window or in markup. Next, in the Page_Load add code similarto following example:namevalidator.Enabled = Trueagevalidator.Enabled = Trueagerequiredvalidator.Enabled = True
Here, we simply set Enabled of all validation controls to true.This is necessary so that every thing works well even after multiplepost backs. Next, add following code in Click event of Button1.agevalidator.Enabled = Falseagerequiredvalidator.Enabled = FalseIf namevalidator.IsValid ThenLabel3.Text = "You Entered Name :" & TextBox1.TextLabel4.Text = ""End If
Here, we set Enabled property of validation controls for TextBox2(Age). This will suppress validation of TextBox2 and no error isgenerated. We then check IsValid property of namevalidator and if it istrue we process the entered value. Similarly, add following code in theClick event handler of Button2.namevalidator.Enabled = FalseIf agerequiredvalidator.IsValid And _agevalidator.IsValid ThenLabel3.Text = ""Label4.Text = "You Entered Age :" & TextBox2.TextEnd If
This will ensure that when you click Button2 validation for TextBox1 will be suppressed.Summary
In this article I explained how ASP.NET validationcontrols work. We saw a situation where you want to validate a page inparts. We also saw how to achieve this by making the validation on theserver along with the Enabled property of validation controls.