[ Home | Syllabus | Course Notes | Assignments | Search]
Both client and server side validators
Kinds of validation controls:
All but last derive from common base class—BaseValidator and share
//// Example
<asp:TextBox ID="Password" TextMode="Password" RunAt="server" /> <asp:RequiredFieldValidator ControlToValidate="Password" ErrorMessage="Required field" Display="static" ForeColor="blue" RunAt="server" />
//// adding check for at least 8 characters
<asp:RegularExpressionValidator ControlToValidate="Password" ValidationExpression=".{8,}" ErrorMessage="You must enter at least 8 characters" Display="dynamic" ForeColor="blue" RunAt="server" />
<asp:TextBox ID="Percent" RunAt="server" /> <asp:RangeValidator ControlToValidate="Percent" MinimumValue="0" MaximumValue="100" Type="Integer" ErrorMessage="Value out of range" Display="static" RunAt="server" />
//// example using Dates
<asp:TextBox ID="MyDate" RunAt="server" /> <asp:RangeValidator ControlToValidate="MyDate" MinimumValue="10/01/2002" MaximumValue="12/31/2002" Type="Date" ErrorMessage="Date out of range" Display="static" RunAt="server" />
<asp:TextBox ID="Minimum" RunAt="server" /> <asp:TextBox ID="Maximum" RunAt="server" /> <asp:CompareValidator ControlToValidate="Maximum" ControlToCompare="Minimum" Type="Integer" Operator="GreaterThanEqual" ErrorMessage="Invalid maximum" Display="static" RunAt="server" />
<asp:TextBox ID="Password1" TextMode="Password" RunAt="server" /> <asp:TextBox ID="Password2" TextMode="Password" RunAt="server" /> <asp:CompareValidator ControlToValidate="Password2" ControlToCompare="Password1" Type="String" Operator="Equal" ErrorMessage="Mismatch" Display="static" RunAt="server" />
<asp:TextBox ID="Quantity" RunAt="server" /> <asp:RegularExpressionValidator ControlToValidate="Quantity" ValidationExpression="^\d+$" ErrorMessage="Digits only" Display="static" RunAt="server" />
<asp:TextBox ID="EMail" RunAt="server" /> <asp:RegularExpressionValidator ControlToValidate="EMail" ValidationExpression="^[\w\.-]+@[\w-]+\.[\w\.-]+$" ErrorMessage="Invalid e-mail address" Display="static" RunAt="server" />
<asp:TextBox ID="Amount" RunAt="server" /> <asp:CustomValidator ControlToValidate="Amount" ClientValidationFunction="__validateAmount" OnServerValidate="ValidateAmount" ErrorMessage="Amount must be a multiple of 10" Display="static" RunAt="server" /> . . . <script language="JavaScript"> <!-- function __validateAmount (source, args) { args.IsValid = (args.Value % 10 == 0); } --> </script> <script language="C#" runat="server"> void ValidateAmount (Object sender, ServerValidateEventArgs e) { try { e.IsValid = (Convert.ToInt32 (e.Value) % 10 == 0); } catch (FormatException) { // In case a non-numeric value is entered e.IsValid = false; } } </script>
Collects error messages in a separate control
<asp:TextBox ID="UserName" RunAt="server" /> <asp:RequiredFieldValidator ControlToValidate="UserName" ErrorMessage="The user name can't be blank" Display="none" RunAt="server" /> <asp:TextBox ID="Password" TextMode="Password" RunAt="server" /> <asp:RequiredFieldValidator ControlToValidate="Password" ErrorMessage="The password can't be blank" Display="none" RunAt="server" /> <asp:RegularExpressionValidator ControlToValidate="Password" ValidationExpression=".{8,}" Display="none" ErrorMessage="The password must contain at least 8 characters" RunAt="server" /> <asp:ValidationSummary DisplayMode="BulletList" HeaderText="This page contains the following errors" RunAt="server" />
RequiredFieldValidators to verify that a name and e-mail address are provided
A RegularExpressionValidator to verify that the e-mail address is well formed
A RegularExpressionValidator to verify that the zip code, if entered, consists of five numeric characters, optionally followed by a hyphen and four more numeric characters
A RegularExpressionValidator to verify that the credit card number, if entered, is well formed—specifically, that it contains from 15 to 20 characters and that all characters are either digits or hyphens
<html> <head> <style> <!-- body { font: 10pt verdana }; table { font: 10pt verdana }; input { font: 10pt verdana }; --> </style> </head> <body> <table cellpadding="4" border="1"> <tr bgcolor="yellow"> <td> Hi! We're Spammers, Incorporated. If you'll provide us with an e-mail address, we'll clog your in-box with e-mail. Leave a snail mail address and we'll bombard you with paper mail, too. If you're a totally trusting person, type in a credit card number. We'll use it to defray office costs next month. </td> </tr> </table> <h3>Yes, I want to be spammed. Sign me up now!</h3> <form runat="server"> <table cellpadding="4"> <tr> <td align="right"> Name </td> <td> <asp:TextBox ID="Name" RunAt="server" /> </td> <td> <asp:RequiredFieldValidator ControlToValidate="Name" ErrorMessage="Please enter your name" Display="dynamic" RunAt="server" /> </td> </tr> <tr> <td align="right"> E-Mail Address </td> <td> <asp:TextBox ID="EMail" RunAt="server" /> </td> <td> <asp:RequiredFieldValidator ControlToValidate="EMail" ErrorMessage="Please enter your e-mail address" Display="dynamic" RunAt="server" /> <asp:RegularExpressionValidator ControlToValidate="EMail" ValidationExpression="^[\w\.-]+@[\w-]+\.[\w\.-]+$" ErrorMessage="Invalid e-mail address" Display="dynamic" RunAt="server" /> </td> </tr> <tr> <td align="right"> Address </td> <td> <asp:TextBox ID="Address" RunAt="server" /> </td> <td> </td> </tr> <tr> <td align="right"> City </td> <td> <asp:TextBox ID="City" RunAt="server" /> </td> <td> </td> </tr> <tr> <td align="right"> State </td> <td> <asp:DropDownList ID="StateList" RunAt="server"> <asp:ListItem Text="AL" RunAt="server" /> ... <asp:ListItem Text="WY" RunAt="server" /> </asp:DropDownList> </td> <td> </td> </tr> <tr> <td align="right"> Zip </td> <td> <asp:TextBox ID="ZipCode" RunAt="server" /> </td> <td> <asp:RegularExpressionValidator ControlToValidate="ZipCode" ValidationExpression="^(\d{5}|\d{5}\-\d{4})$" ErrorMessage="Invalid zip code" Display="dynamic" RunAt="server" /> </td> </tr> <tr> <td align="right"> Credit Card Number </td> <td> <asp:TextBox ID="CreditCardNumber" RunAt="server" /> </td> <td> <asp:RegularExpressionValidator ControlToValidate="CreditCardNumber" ValidationExpression="^[\d\-]{15,20}$" ErrorMessage="Invalid card number" Display="dynamic" RunAt="server" /> </td> </tr> <tr> <td> </td> <td> <asp:Button Text="Sign Me Up" OnClick="OnSignMeUp" RunAt="server" /> </td> <td> </td> </tr> </table> </form> </body> </html> <script language="C#" runat="server"> void OnSignMeUp (Object sender, EventArgs e) { if (IsValid) { StringBuilder sb = new StringBuilder ("Thanks.aspx?Name=", 256); sb.Append (Name.Text); sb.Append ("&EMail="); sb.Append (EMail.Text); string address = Address.Text; string city = City.Text; string state = StateList.SelectedItem.Text; string zip = ZipCode.Text; if (address.Length > 0 && city.Length > 0 && zip.Length > 0) { sb.Append ("&Address="); sb.Append (address); sb.Append ("&City="); sb.Append (city); sb.Append ("&State="); sb.Append (state); sb.Append ("&ZipCode="); sb.Append (zip); } string number = CreditCardNumber.Text; if (number.Length > 0) { sb.Append ("&CreditCardNumber="); sb.Append (number); } Response.Redirect (sb.ToString ()); } } </script>
--------
<%@ Page Language="C#" %> <html> <body> Here's the information you entered:<br><br> <ul> <% Response.Write ("<li>Name: " + Request["Name"]); Response.Write ("<li>E-mail address: " + Request["EMail"]); if (Request["Address"] != null) { StringBuilder sb = new StringBuilder ("<li>Address: ", 64); sb.Append (Request["Address"]); sb.Append (", "); sb.Append (Request["City"]); sb.Append (", "); sb.Append (Request["State"]); sb.Append (" "); sb.Append (Request["ZipCode"]); Response.Write (sb.ToString ()); } if (Request["CreditCardNumber"] != null) Response.Write ("<li>Credit card number: " + Request["CreditCardNumber"]); %> </ul> Thanks for signing up with Spammers, Inc.! </body> </html>
<html> <body> <h1>Conditional Validation Demo</h1> <hr> <form runat="server"> <table cellpadding="4"> <tr> <td align="right"> Name </td> <td> <asp:TextBox ID="Name" RunAt="server" /> </td> <td> <asp:RequiredFieldValidator ControlToValidate="Name" ErrorMessage="Please enter your name" Display="dynamic" Color="red" RunAt="server" /> </td> </tr> <tr> <td align="right"> E-Mail Address </td> <td> <asp:TextBox ID="EMail" RunAt="server" /> </td> <td> <asp:RequiredFieldValidator ControlToValidate="EMail" ErrorMessage="Please enter your e-mail address" Display="dynamic" Color="red" Enabled="false" ID="EMailRequiredValidator" RunAt="server" /> <asp:RegularExpressionValidator ControlToValidate="EMail" ValidationExpression="^[\w\.-]+@[\w-]+\.[\w\.-]+$" ErrorMessage="Invalid e-mail address" Display="dynamic" Color="red" Enabled="false" ID="EMailExpressionValidator" RunAt="server" /> </td> </tr> <tr> <td> </td> <td> <asp:CheckBox ID="Confirm" Text="E-mail my confirmation" OnCheckedChanged="OnCheckBoxClicked" AutoPostBack="true" RunAt="server" /> </td> <td> </td> </tr> <tr> <td> </td> <td> <asp:Button Text="Register" OnClick="OnRegister" RunAt="server" /> </td> <td> </td> </tr> </table> <br><hr><br> <asp:Label ID="Output" RunAt="server" /> </form> </body> </html> <script language="C#" runat="server"> void OnCheckBoxClicked (Object sender, EventArgs e) { EMailRequiredValidator.Enabled = Confirm.Checked; EMailExpressionValidator.Enabled = Confirm.Checked; } void OnRegister (Object sender, EventArgs e) { if (IsValid) { if (Confirm.Checked) { Output.Text = "Confirmation will be e-mailed to " + EMail.Text + "."; } else { Output.Text = "At your request, no confirmation will " + "be sent."; } } } </script>
F1: Reserves space so page layout won't change if error
F2: says any character ('.') repeated 8 to infinity times
F3:begins with ('^') one or more ('+') digits ('\d')
F4: starts with ('^') one or more ('+') things that make up a word('\w') or a '.' or '-' following by an '@' followed by word characters with at least one embdedded '.'
F5: this will be executed on the client browser
F6: this will be executed on the server
F7: allocates no room to display error message
F8: could also display in a message box
F9: returns url (with query string)