ASP.NET
validation controls provide an easy-to-use but powerful mechanism of
ensuring that data is entered correctly on the forms. There are 6
validation controls included in the ASP.NET 2.0 and ASP.NET 3.5
versions. If you are not familiar with Validation Controls in ASP.NET, here’s a recommended read for you.
In
this article, let us see some tips and tricks that can be applied to
the validation controls. This article is for beginner and intermediate
users who have been using validation controls. There is something for
everyone!!
Tip 1:
Always use Page.IsValid before submitting data. Apart from the other
benefits, using it prevents submitting data from old browsers that do
not support javascript.
Tip 2: The display property for the ASP.NET validation controls has 3 settings: None, Static(default), and Dynamic. ‘Static’
outputs HTML code (related to error) at all times even when no error
has occurred. So when there is more than one validation control placed
next to the field, the first validation control occupies screen space
even when there is no error. In case the second validation control
fires an error message, the message is pushed away from the control
since the first validation control is occupying screen space.
Set the ‘display’ property of a validation control to ‘Dynamic’. This property renders the error message with the attribute display:none; It helps you to display the error message next to the control .
Tip 3: To prevent validation to occur on the click of the Cancel button, set the ‘CausesValidation’ property to false
<asp:Button ID="btnCancel" Runat="server" CausesValidation="False" Text="Cancel" />
Tip 4: Use the ‘InitialValue’ property of the RequiredFieldValidator to validate controls like combobox which have a default value.
For
eg: If your combobox has a default item called “--Select --“ and you
want that the user should select a value other than the default value
before submitting the form, then set the ‘InitialValue’ property of the
RequiredFieldValidator to “--Select--“.
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="--Select--" />
<asp:ListItem Value="Item1" />
<asp:ListItem Value="Item2" />
<asp:ListItem Value="Item3" />
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="DropDownList1" InitialValue="--Select--"></asp:RequiredFieldValidator>
Tip 5:
A RegularExpressionValidator can be used to handle string patterns. For
eg: A Name textbox that should accept a maximum of 30 characters with
only alphabets, space, fullstop(.) and a ‘(apostrophe). A
regularexpression like ‘^([a-zA-z.'"s]{2,30})$’ does the trick.
However
when you are using Localization and using a language like Arabic, you
have to often provide for validating characters in a different dialect.
You can solve this using the following technique:
- In the Resource.resx file, create a resourcekey called ValidName giving it a value of ^([a-zA-z.'"s]{2,30})$
- In the Resource.ar-EG.resx file, use the same key but with a diff value ^(["u0600-"u06FF.'"s]{2,30})$
- In the Resource.ar-EG.resx file, use the same key but with a diff value ^(["u0600-"u06FF.'"s]{2,30})$
Use it in your page using the following way. Observe the bold text:
<asp:RegularExpressionValidatorID='regEVFname' runat='server'ControlToValidate='txtName'
Display='Dynamic'ErrorMessage='Invalid’
ValidationExpression='<%$ Resources:Resource, ValidName %>'SetFocusOnError='True'></asp:RegularExpressionValidator>
When the user selects English, he can enter only A-Za-z. Similarly for Arabic, he can enter only the Arabic characters and not English.
<asp:RegularExpressionValidatorID='regEVFname' runat='server'ControlToValidate='txtName'
Display='Dynamic'ErrorMessage='Invalid’
ValidationExpression='<%$ Resources:Resource, ValidName %>'SetFocusOnError='True'></asp:RegularExpressionValidator>
When the user selects English, he can enter only A-Za-z. Similarly for Arabic, he can enter only the Arabic characters and not English.
Tip 6:
The validation controls provide both Server and Client Side validation.
To turn off client-side validation, set the ‘EnableClientScript = false’
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" Runat="server"
Text="Error" ControlToValidate="TextBox1" EnableClientScript="false"/>
Tip 7: Use CompareValidator to validate date with format of "dd/MM/yyyy".
The
validator uses the CultureInfo object of the thread to determine date
format. So what you need to do is to set the desired culture format in
the Page directive
<%@ Page culture="your culture" %>
This
tip was shared by PeterBlum in the asp.net forums. By the way, Peter
has an amazing suite of data entry and validation controls on his site at a reasonable price.
Tip 8:
Instead of the textual error message, you can even add an image or
sound to your validator control. The Text and Error Message property
accepts HTML tags.
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ControlToValidate="TextBox1" EnableClientScript="false" ID="RequiredFieldValidator1" runat="server" Text="<bgsound src='C:"Windows"Media"Windows Error.wav'>"></asp:RequiredFieldValidator>
Just make sure that the EnableClientScript="false" when you want a sound instead of a text message.
Tip 9:
If you have two set of forms (eg: Login and Registration) in a single
page and want to keep the validation of the two groups separate, use
‘ValidationGroups’. All you need to do, is to specify a common group
name for a set of controls that you want to validate separately.
<div>
<asp:TextBox ID="TextBox1" ValidationGroup="Group1" runat="server"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ControlToValidate="TextBox1" ValidationGroup="Group1" ID="RequiredFieldValidator1" runat="server" Text="Error"></asp:RequiredFieldValidator>
<asp:Button ID="Button1" runat="server" ValidationGroup="Group1" Text="Button" />
</div>
<br />
<br />
<div>
<asp:TextBox ID="TextBox2" ValidationGroup="Group2" runat="server"></asp:TextBox>
<br />
<asp:RequiredFieldValidator ControlToValidate="TextBox1" ValidationGroup="Group2" EnableClientScript="false" ID="RequiredFieldValidator2" runat="server" Text="Error"></asp:RequiredFieldValidator>
<asp:Button ID="Button2" runat="server" ValidationGroup="Group2" Text="Button" />
</div>
Tip 10:
Other validator controls like CompareValidator, RangeValidator etc. do
not provide a way to detect if the field is blank or required. The only
way is to do this is to add a RequiredFieldValidator along with the
other validator controls.
However
one exception being the CustomValidator which provides a property
called ‘ValidateEmptyText’. Just set it to true and it validates the
field even if the user has kept the field blank.
Tip 11:
If you want your validation error message to appear in the
‘ValidationSummary‘ control, then set the ‘ErrorMessage’ property on
that validation control. Also, setting 'ShowMessageBox = true' on the
ValidationSummary enables you to display a popup alert.
Tip 12:
In order to create a CustomValidationControl you have to derive from
the 'BaseValidator' class and implement the 'EvaluateIsValid()' method.
Tip 13: In case of an error, the validation controls allow you to set focus on a control in error using the ‘SetFocusOnError’ property.
<asp:RequiredFieldValidator SetFocusOnError="true" ControlToValidate="TextBox1" ID="RequiredFieldValidator1" runat="server" Text="Error!!"></asp:RequiredFieldValidator>