The RangeValidator Server Control The RangeValidator control is quite similar to that of the CompareValidator control, but it makes sure that the end-user value or selection provided is
Trang 1associates itself with one of the form elements on the page In this case, you need only a single
CompareValidator control on the page because a single comparison is made In this example, you are
making a comparison between the value ofTextBox2and that ofTextBox1 Therefore, you use the
ControlToCompareproperty This specifies what value is compared toTextBox2 In this case, the value
isTextBox1
It’s as simple as that If the two text boxes do not match after the page is posted by the end user, the value
of theTextproperty from the CompareValidator control is displayed in the browser An example of this
is shown in Figure 4-2
Figure 4-2
Validating Against Constants
Besides being able to validate values against values in other controls, you can also use the Compare
Validator control to make comparisons against constants of specific data types For example, suppose
you have a text box on your registration form that asks for the age of the user In most cases, you want to
get back an actual number and not something such asaaorbbas a value Listing 4-9 shows you how
to ensure that you get back an actual number
Listing 4-9: Using the CompareValidator to validate against constants
Age:
<asp:TextBox ID="TextBox1" Runat="server" MaxLength="3">
</asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" Runat="server"
Text="You must enter a number"
ControlToValidate="TextBox1" Type="Integer"
Operator="DataTypeCheck"></asp:CompareValidator>
Trang 2In this example, the end user is required to enter in a number into the text box If she attempts to bypass the validation by entering a fake value that contains anything other than a number, the page is identified
as invalid, and the CompareValidator control displays the value of theTextproperty
To specify the data types that you want to use in these comparisons, you simply use theTypeproperty TheTypeproperty can take the following values:
❑ Currency
❑ Double
❑ Integer
❑ String
Not only can you make sure that what is entered is of a specific data type, but you can also make sure
that what is entered is valid when compared to specific constants For instance, you can make sure what
is entered in a form element is greater than, less than, equal to, greater than or equal to, or less than or
equal to a specified value An example of this is illustrated in Listing 4-10
Listing 4-10: Making comparisons with the CompareValidator control
Age:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator1" Runat="server"
Operator="GreaterThan" ValueToCompare="18"
ControlToValidate="TextBox1"
Text="You must be older than 18 to join" Type="Integer">
</asp:CompareValidator>
In this case, the CompareValidator control not only associates itself with theTextBox1control and
requires that the value must be an integer, but it also uses theOperatorand theValueToCompare prop-erties to ensure that the number is greater than 18 Therefore, if the end user enters a value of 18 or less, the validation fails, and the page is considered invalid
TheOperatorproperty can take one of the following values:
❑ Equal
❑ NotEqual
❑ GreaterThan
❑ GreaterThanEqual
❑ LessThan
❑ LessThanEqual
❑ DataTypeCheck
Trang 3TheValueToCompareproperty is where you place the constant value used in the comparison In the
preceding example, it is the number18
The RangeValidator Server Control
The RangeValidator control is quite similar to that of the CompareValidator control, but it makes sure
that the end-user value or selection provided is between a specified range as opposed to being just greater
than or less than a specified constant For an example of this, go back to the text-box element that asks for
the age of the end user and performs a validation on the value provided This is illustrated in Listing 4-11
Listing 4-11: Using the RangeValidator control to test an integer value
Age:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" Runat="server"
ControlToValidate="TextBox1" Type="Integer"
Text="You must be between 30 and 40"
MaximumValue="40" MinimumValue="30"></asp:RangeValidator>
In this example, this page consists of a text box asking for the age of the end user The RangeValidator
control makes an analysis of the value provided and makes sure the value is somewhere in the range of
30 to 40 This is done using theMaximumValueandMinimumValueproperties The RangeValidator control
also makes sure what is entered is an integer data type It uses theTypeproperty, which is set toInteger
The collection of screenshots in Figure 4-3 shows this example in action
Figure 4-3
Trang 4As you can see from the screenshots in Figure 4-3, a value of less than 30 causes the RangeValidator
control to fire, as does a number greater than 40 A value that is somewhere between 30 and 40 (in this
case 34) conforms to the validation rule of the control
The RangeValidator control is not only about validating numbers (although it is most often used in this fashion) It can also be about validating a range of string characters as well as other items, including
calendar dates By default, theTypeproperty of any of the validation controls is set toString You can use the RangeValidator control to make sure what is entered in another server control (such as a calendar control) is within a certain range of dates
For example, suppose that you are building a Web form that asks for a customer’s arrival date, and the arrival date needs to be within two weeks of the current date You can use the RangeValidator control to test for these scenarios quite easily
Because the date range that you want to check is dynamically generated, you assign theMaximumValue
andMinimumValueattribute programmatically in thePage_Loadevent In the Designer, your sample page for this example should look like Figure 4-4
Figure 4-4
Trang 5The idea is that the end user will select a date from the Calendar control, which will then populate the
TextBox control Then, when the end user clicks the form’s button, he is notified if the date selected is
invalid If the date selected is valid, that date is presented through the Label control on the page The
code for this example is presented in Listing 4-12
Listing 4-12: Using the RangeValidator control to test a string date value
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
RangeValidator1.MinimumValue = DateTime.Now.ToShortDateString() RangeValidator1.MaximumValue = DateTime.Now.AddDays(14).ToShortDateString() End Sub
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString() End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
If Page.IsValid Then Label1.Text = "You are set to arrive on: " & TextBox1.Text End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Date Validation Check</title>
</head>
<body>
<form id="form1" runat="server">
Arrival Date:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" runat="server"
Text="You must only select a date within the next two weeks."
ControlToValidate="TextBox1" Type="Date"></asp:RangeValidator><br />
<br />
Select your arrival date:<br />
<asp:Calendar ID="Calendar1" runat="server"
OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
<br />
<asp:Button ID="Button1" runat="server" Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
Trang 6</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
RangeValidator1.MinimumValue = DateTime.Now.ToShortDateString();
RangeValidator1.MaximumValue = DateTime.Now.AddDays(14).ToShortDateString();
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString();
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid) {
Label1.Text = "You are set to arrive on: " + TextBox1.Text.ToString();
} }
</script>
From this code, you can see that when the page is loaded, theMinimumValueandMaximumValueattributes are assigned a dynamic value In this case, theMinimumValuegets the
DateTime.Now.ToShortDate-String()value, while theMaximumValuegets a date of 14 days later
After the end user selects a date, the selected date is populated in theTextBox1control using the
Calendar1_SelectionChangedevent After a date is selected and the button on the page is clicked, the
Button1_Clickevent is fired and the page is checked for form validity using thePage.IsValidproperty
An invalid page will give you the result shown in Figure 4-5
The RegularExpressionValidator Server Control
One exciting control that developers like to use is the RegularExpressionValidator control This control
offers a lot of flexibility when you apply validation rules to your Web forms Using the RegularExpres-sionValidator control, you can check a user’s input based on a pattern that you define using a regular
expression
This means that you can define a structure that a user’s input will be applied against to see if its structure matches the one that you define For instance, you can define that the structure of the user input must
be in the form of an e-mail address or an Internet URL; if it doesn’t match this definition, the page is
considered invalid Listing 4-13 shows you how to validate what is input into a text box by making sure
it is in the form of an e-mail address
Trang 7Figure 4-5
Listing 4-13: Making sure the text-box value is an e-mail address
Email:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="You must enter an email address"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>
Just like the other validation server controls, the RegularExpressionValidator control uses the
ControlTo-Validateproperty to bind itself to the TextBox control, and it includes aTextproperty to push out the
error message to the screen if the validation test fails The unique property of this validation control is
theValidationExpressionproperty This property takes a string value, which is the regular expression
you are going to apply to the input value
Visual Studio 2008 makes it a little easier to use regular expressions through the use of the Regular
Expression Editor This editor provides a few commonly used regular expressions that you might want
to apply to your RegularExpressionValidator To get at this editor, you work with your page from Design
view Be sure to highlight theRegularExpressionValidator1server control in this Design view to see
the control’s properties In the Property window of Visual Studio, click the button found next
Trang 8to theValidationExpressionproperty to launch the Regular Expression Editor This editor is shown in Figure 4-6
Figure 4-6
Using this editor, you can find regular expressions for things like e-mail addresses, Internet URLs, zip
codes, phone numbers, and social security numbers In addition to working with the Regular Expression Editor to help you with these sometimes complicated regular expression strings, you can also find a
good-sized collection of them at an Internet site called RegExLib found atwww.regexlib.com
The CustomValidator Server Control
So far, you have seen a wide variety of validation controls that are at your disposal In many cases, these validation controls address many of the validation rules that you want to apply to your Web forms
Sometimes, however, none of these controls works for you, and you have to go beyond what they offer This is where the CustomValidator control comes into play
The CustomValidator control allows you to build your own client-side or server-side validations that can then be easily applied to your Web forms Doing so allows you to make validation checks against values
or calculations performed in the data tier (for example, in a database), or to make sure that the user’s
input validates against some arithmetic validation (for example, determining if a number is even or odd) You can do quite a bit with the CustomValidator control
Using Client-Side Validation
One of the worthwhile functions of the CustomValidator control is its capability to easily provide custom client-side validations Many developers have their own collections of JavaScript functions they employ
in their applications, and using the CustomValidator control is one easy way of getting these functions
implemented
Trang 9For example, look at a simple form that asks for a number from the end user This form uses the
CustomValidator control to perform a custom client-side validation on the user input to make sure that
the number provided is divisible by 5 This is illustrated in Listing 4-14
Listing 4-14: Using the CustomValidator control to perform client-side validations
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = "VALID NUMBER!"
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>CustomValidator</title>
<script type="text/javascript">
function validateNumber(oSrc, args) { args.IsValid = (args.Value % 5 == 0);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
Number:
<asp:TextBox ID="TextBox1"
Runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Number must be divisible by 5"
ClientValidationFunction="validateNumber">
</asp:CustomValidator>
</p>
<p>
<asp:Button ID="Button1" OnClick="Button1_Click"
Runat="server" Text="Button"></asp:Button>
</p>
<p>
<asp:Label ID="Label1" Runat="server"></asp:Label>
</p>
</div>
</form>
</body>
</html>
Trang 10<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(Object sender, EventArgs e) {
Label1.Text = "VALID NUMBER!";
}
</script>
Looking over this Web form, you can see a couple of things happening First, it is a simple form with only
a single text box requiring user input The user clicks the button that triggers theButton1_Clickevent, which in turn populates theLabel1control on the page It carries out this simple operation only if all the validation checks are performed and the user input passes these tests
One item that is different about this page is the inclusion of the second<script>block found within
the<head>section This is the custom JavaScript Note that Visual Studio 2008 is very friendly toward these kinds of constructions, even when you are switching between the Design and Code views of the
page — something previous Visual Studio editions were rather poor at dealing with This JavaScript
function —validateNumber— is shown here:
<script type="text/javascript">
function validateNumber(oSrc, args) {
args.IsValid = (args.Value % 5 == 0);
}
</script>
This second<script>section is the client-side JavaScript that you want the CustomValidator control
to use when making its validation checks on the information entered into the text box The JavaScript
functions you employ are going to use theargs.IsValidproperty and set this property to eithertrue
orfalsedepending on the outcome of the validation check In this case, the user input (args.Value) is checked to see if it is divisible by5 The Boolean value returned is then assigned to theargs.IsValid
property, which is then used by the CustomValidator control
The CustomValidator control, like the other controls before it, uses theControlToValidateproperty
to associate itself with a particular element on the page The property that you are interested in here is
theClientValidationFunctionproperty The string value provided to this property is the name of the client-side function that you want this validation check to employ when the CustomValidator control is triggered In this case, it isvalidateNumber:
ClientValidationFunction="validateNumber"
If you run this page and make an invalid entry, you produce the result illustrated in Figure 4-7
Using Server-Side Validation
Now let’s move this same validation check from the client to the server The CustomValidator control
allows you to make custom server-side validations a reality as well You will find that creating your
server-side validations is just as easy as creating client-side validations