When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips
Search

Sections:
Book Reviews
Sample Chapters
Commonly Asked Message Board Questions
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
Web Hosts
XML
Information:
Advertise
Feedback
Author an Article

ASP ASP.NET ASP FAQs Message Board Feedback
 
Print this Page!
Published: Wednesday, November 23, 2005

Dissecting the Validation Controls in ASP.NET 2.0

By Scott Mitchell


Introduction


One annoying task that most every developer has had to face in the past is form validation. Since forms are an integral part of dynamic, data-driven Web sites, it is essential that a user's query into a form fit the specified guidelines. For example, in a website like eBay where users are entering shipping and billing information, it is vital that the user enter credit card numbers, zip codes, email addresses, and other information in an acceptible format.

Prior to ASP.NET, form validation was a frustrating and tedious process. The page developer was responsible for creating the client-side and server-side logic for each and every validation check. ASP.NET version 1.0 helped end this tedium with a host of validation Web controls, making validation was as simple as adding the appropriate validation control to the web page and setting a few properties.

While validation controls in ASP.NET version 1.x greatly improved the developer's experience with adding page validation, they still lacked some important functionality. For one, the client-side script emitted by the validation controls used the JavaScript object document.all, which is an object that is not in the JavaScript standard and only supported by Microsoft's Internet Explorer browser. This meant that browsers other than Internet Explorer could not enjoy the client-side benefits of the validation controls. Additionally, the validation controls could not be logically grouped, which proved irksome with pages divided up into different sections.

ASP.NET 2.0 doesn't add any new validation controls, but it does fix the validation control shortcomings in version 1.x, along with adding additional features. In this article we'll dissect the validation controls in version 2.0. Read on to learn more!

(This article does not cover the basics of ASP.NET's validation controls; for more information on that refer to Form Validation with ASP.NET - It Doesn't Get Any Easier! and User Input Validation in ASP.NET.)

- continued -

Validation Groups


One of the annoyances with ASP.NET version 1.x validation controls was that they all were checked against when a postback occurred. Granted, you could suppress all validators from firing when a particular Button control was clicked using the CausesValidation property, but oftentimes a finer degree of control is needed. Oftentimes Web Forms have multiple "sections," where each section has a set of input controls and a Button that, when clicked, performs some action based on that section's controls. Ideally, each section would have section-dependent validation controls, but with ASP.NET version 1.x's limitations, developers were either forced to forgo the validation controls altogether (or forgo them in all but one section) or turn to a third-party validation solution, such as Peter Blum's Professional Validation And More (VAM). (Read a short review of mine on VAM and Peter's other product, Peter's Date Package.)

Thankfully with ASP.NET version 2.0 validation controls can be grouped. All validation controls now contain the ValidationGroup property. The default value of this property is the empty string, which indicates that the validation control is not part of a group. But those controls that have the same ValidationGroup values are considered grouped. The Button, LinkButton, DropDownList, and other controls that are commonly used to submit a Web Form also contain the ValidationGroup property. When a Button with a ValidationGroup property value is clicked all of the validation controls on the page with the same ValidationGroup property value are fired.

On postback, the Page.IsValid property reflects the validity of all of the validation controls that have been validated. By default, this is the set of validation controls whose ValidationGroup property value equals the ValidationGroup property value of the control that instigated the postback. However, additional validation controls can be programmatically checked by calling the validation control's Validate() method.

In ASP.NET version 1.x the Page class had a Validate() method that could be called programmatically which would check all validator controls in the page; furthermore, there was a Validators property that provided a collection of all validation controls. With version 2.0, the Page class's Validate() method has been enhanced and a new GetValidators() method has been added. (The Validation property remains for backwards compatibility, and still returns all validation controls in the page.)

With 2.0 the Validate() method can be called without passing in any parameters, just like in version 1.x. Doing so validates against all of the validation controls in the page. The Validate() method has an overload that takes in a string parameter and validates against those controls whose ValidationGroup property equals the passed-in string to Validate(). When a Button control causes a postback and its CausesValidation property is True, internally the Page.Validate(ValidationGroupPropertyValue) method gets called. As in version 1.x, the Page.Validators property returns a collection of all validation controls. The GetValidators(ValidationGroup) method returns a collection of validation controls that belong to the specified validation group.

The behavior of these properties and methods is illustrated in the ValidationMethod.aspx demo available for download at the end of this article...

Focusing On Invalid Form Fields


One of the nifty features of ASP.NET version 2.0 is that all server controls now have a Focus() method. Calling this method injects a bit of client-side JavaScript to set focus to a particular control on page load. In addition to this nifty little method, the validation controls offer similar functionality through their SetFocusOnError property. This property, if set to True, causes the Web control the validation control is operating on to receive focus if the validation control is invalid. This is a nice little usability touch that your users will likely appreciate.

Client-Side Validation Support in Non-Microsoft Browsers


One of the unfortunate aspects of ASP.NET version 1.x's validation controls was that they used a bit of proprietary JavaScript to provide client-side validation functionality, making the validation controls inoperable in non-Microsoft browsers. This topic was discussed in detail in a previous article of mine, Client-Side Validation in Downlevel Browsers. The workaround for version 1.x was to either:
  • Build up your own validation control library from scratch,
  • Use a free or third-party validation package that has done the dirty work for you. (The two options I mentioned in my article were Paul Glavich's free DomValidators controls or Peter Blum's Professional Validation And More (mentioned earlier in this article).
The client-side script used by the validation controls in 2.0 still includes calls to document.all, but also includes equivalent checks using the standard-compliant document.getElementById(id). The end result is that the client-side validation features of the validation controls now work with any browser that supports JavaScript 1.2 or higher. This includes Internet Explorer's two largest competitors: FireFox and Opera.

Conclusion


The validation controls in ASP.NET version 2.0 have been improved from version 1.x. While there are no new validation controls, the existing controls have been enhanced to include support for validation groups and client-side support for browsers other than just Internet Explorer. While these enhancements do make ASP.NET's built-in validation controls much more useful in real-world settings, they still lack many of the more advanced features found in third-party validation packages. For most developers, however, these new additions to the validation controls will make the built-in controls sufficient for real-world use.

Happy Programming!

  • By Scott Mitchell


    Attachments


  • Download the code examples (ZIP format)



  • ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article