1. Trang chủ
  2. » Công Nghệ Thông Tin

Professional ASP.NET 3.5 in C# and Visual Basic Part 27 pot

10 237 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 323,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

For an example of using the CustomValidator control for some custom server-side validation, you can work with the same example as you did when creating the client-side validation.. Listi

Trang 1

Figure 4-7

If you create your own server-side validations, you can make them as complex as your applications

require For instance, using the CustomValidator for server-side validations is something you do if you

want to check the user’s input against dynamic values coming from XML files, databases, or elsewhere

For an example of using the CustomValidator control for some custom server-side validation, you

can work with the same example as you did when creating the client-side validation Now, create a

server-side check that makes sure a user-input number is divisible by 5 This is illustrated in Listing 4-15

Listing 4-15: Using the CustomValidator control to perform server-side validations

VB

<%@ Page Language="VB" %>

<script runat="server">

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If Page.IsValid Then

Label1.Text = "VALID ENTRY!"

End If

End Sub

Sub ValidateNumber(sender As Object, args As ServerValidateEventArgs)

Try

Dim num As Integer = Integer.Parse(args.Value) args.IsValid = ((num mod 5) = 0)

Catch ex As Exception

args.IsValid = False End Try

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>CustomValidator</title>

</head>

<body>

<form id="form1" runat="server">

Trang 2

<p>

Number:

<asp:TextBox ID="TextBox1"

Runat="server"></asp:TextBox>

&nbsp;

<asp:CustomValidator ID="CustomValidator1"

Runat="server" ControlToValidate="TextBox1"

Text="Number must be divisible by 5"

OnServerValidate="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>

C#

<%@ Page Language="C#" %>

<script runat="server">

protected void Button1_Click(Object sender, EventArgs e) {

if (Page.IsValid) {

Label1.Text = "VALID ENTRY!";

}

}

void ValidateNumber(object source, ServerValidateEventArgs args)

{

try

{

int num = int.Parse(args.Value);

args.IsValid = ((num%5) == 0);

}

catch(Exception ex)

{

args.IsValid = false;

}

}

</script>

Instead of a client-side JavaScript function in the code, this example includes a server-side function —

ValidateNumber.TheValidateNumberfunction, as well as all functions that are being constructed to

work with the CustomValidator control, must use theServerValidateEventArgsobject as one of the

parameters in order to get the data passed to the function for the validation check TheValidateNumber

function itself is nothing fancy It simply checks to see if the provided number is divisible by 5

Trang 3

From within your custom function, which is designed to work with the CustomValidator control, you

actually get at the value coming from the form element through theargs.Valueobject Then you set the

args.IsValidproperty to eitherTrueorFalsedepending on your validation checks From the preceding

example, you can see that theargs.IsValidis set toFalseif the number is not divisible by 5 and also

that an exception is thrown (which would occur if a string value was input into the form element) After

the custom function is established, the next step is to apply it to the CustomValidator control, as shown

in the following example:

<asp:CustomValidator ID="CustomValidator1"

Runat="server" ControlToValidate="TextBox1"

Text="Number must be divisible by 5"

OnServerValidate="ValidateNumber"></asp:CustomValidator>

To make the association between a CustomValidator control and a function that you have in your

server-side code, you simply use theOnServerValidateattribute The value assigned to this property is

the name of the function — in this case,ValidateNumber

Running this example causes the postback to come back to the server and the validation check (based on

theValidateNumberfunction) to be performed From here, the page reloads and thePage_Loadevent is

called In the example from Listing 4-15, you can see that a check is done to see whether the page is valid

This is done using thePage.IsValidproperty:

If Page.IsValid Then

Label1.Text = "VALID ENTRY!"

End If

Using Client-Side and Server-Side Validation Together

As stated earlier in this chapter, you have to think about the security of your forms and to ensure that

the data you are collecting from the forms is valid data For this reason, when you decide to employ

client-side validations (as you did in Listing 4-14), you should take steps to also reconstruct the client-side

function as a server-side function When you have done this, you should associate the CustomValidator

control to both the client-side and server-side functions In the case of the number check validation from

Listings 4-14 and 4-15, you can use both validation functions in your page and then change the

CustomValidator control to point to both of these functions, as shown in Listing 4-16

Listing 4-16: The CustomValidator control with client- and server-side validations

<asp:CustomValidator ID="CustomValidator1"

Runat="server" ControlToValidate="TextBox1"

Text="Number must be divisible by 5"

ClientValidationFunction="validateNumber"

OnServerValidate="ValidateNumber"></asp:CustomValidator>

From this example, you can see it is simply a matter of using both theClientValidationFunctionand

theOnServerValidateattributes at the same time

The ValidationSummary Server Control

The ValidationSummary control is not a control that performs validations on the content input into your

Web forms Instead, this control is the reporting control, which is used by the other validation controls

Trang 4

on a page You can use this validation control to consolidate error reporting for all the validation errors that occur on a page instead of leaving this up to each and every individual validation control

You might want this capability for larger forms, which have a comprehensive form validation process If this is the case, you may find it rather user-friendly to have all the possible validation errors reported to the end user in a single and easily identifiable manner These error messages can be displayed in a list,

bulleted list, or paragraph

By default, the ValidationSummary control shows the list of validation errors as a bulleted list This is

illustrated in Listing 4-17

Listing 4-17: A partial page example of the ValidationSummary control

<p>First name

<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>

&nbsp;

<asp:RequiredFieldValidator ID="RequiredFieldValidator1"

Runat="server" ErrorMessage="You must enter your first name"

ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

</p>

<p>Last name

<asp:TextBox ID="TextBox2" Runat="server"></asp:TextBox>

&nbsp;

<asp:RequiredFieldValidator ID="RequiredFieldValidator2"

Runat="server" ErrorMessage="You must enter your last name"

ControlToValidate="TextBox2"></asp:RequiredFieldValidator>

</p>

<p>

<asp:Button ID="Button1" OnClick="Button1_Click" Runat="server"

Text="Submit"></asp:Button>

</p>

<p>

<asp:ValidationSummary ID="ValidationSummary1" Runat="server"

HeaderText="You received the following errors:">

</asp:ValidationSummary>

</p>

<p>

<asp:Label ID="Label1" Runat="server"></asp:Label>

</p>

This example asks the end user for her first and last name Each text box in the form has an associated

RequiredFieldValidator control assigned to it When the page is built and run, if the user clicks the Submit button with no values placed in either of the text boxes, it causes both validation errors to fire This result

is shown in Figure 4-8

As in earlier examples of validation controls on the form, these validation errors appear next to each of the text boxes You can see, however, that the ValidationSummary control also displays the validation

errors as a bulleted list in red at the location of the control on the Web form In most cases, you do not

want these errors to appear twice on a page for the end user You can change this behavior by using the

Textproperty of the validation controls, in addition to theErrorMessageproperty, as you have typically done throughout this chapter This approach is shown in Listing 4-18

Trang 5

Figure 4-8

Listing 4-18: Using the Text property of a validation control

<asp:RequiredFieldValidator ID="RequiredFieldValidator1"

Runat="server" ErrorMessage="You must enter your first name" Text="*"

ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

or

<asp:RequiredFieldValidator ID="RequiredFieldValidator1"

Runat="server" ErrorMessage="You must enter your first name"

ControlToValidate="TextBox1">*</asp:RequiredFieldValidator>

Listing 4-18 shows two ways to accomplish the same task The first is to use theTextproperty and the

second option is to place the provided output between the tags of the<asp:RequiredFieldValidator>

elements Making this type of change to the validation controls produces the results shown in Figure 4-9

To get this result, just remember that the ValidationSummary control uses the validation control’s

ErrorMessageproperty for displaying the validation errors if they occur TheTextproperty is used

by the validation control and is not utilized at all by the ValidationSummary control

In addition to bulleted lists, you can use theDisplayModeproperty of the ValidationSummary control to

change the display of the results to other types of formats This control has the following possible values:

❑ BulletList

❑ SingleParagraph

Trang 6

Figure 4-9

Figure 4-10

Trang 7

You can also utilize a dialog box instead of displaying the results to the Web page Listing 4-19 shows an

example of this behavior

Listing 4-19: Using a dialog box to report validation errors

<asp:ValidationSummary ID="ValidationSummary1" Runat="server"

ShowMessageBox="True" ShowSummary="False"></asp:ValidationSummary>

From this code example, you can see that theShowSummaryproperty is set toFalse— meaning that the

bulleted list of validation errors are not shown on the actual Web page However, because the

ShowMes-sageBoxproperty is set toTrue, you now get these errors reported in a message box, as illustrated in

Figure 4-10

Turning Off Client- Side Validation

Because validation server controls provide clients with client-side validations automatically (if the

requesting container can properly handle the JavaScript produced), you might, at times, want a way

to control this behavior

It is quite possible to turn off the client-side capabilities of these controls so that they don’t independently

send client-side capabilities to the requestors For instance, you might want all validations done on the

server, no matter what capabilities the requesting containers offer You can take a couple of approaches

to turning off this functionality

The first is at the control level Each of the validation server controls has a property called

Enable-ClientScript This property is set toTrueby default, but setting it toFalseprevents the control from

sending out a JavaScript function for validation on the client Instead, the validation check is done on the

server The use of this property is shown in Listing 4-20

Listing 4-20: Disabling client-side validations in a validation control

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"

Text="*" ControlToValidate="TextBox1" EnableClientScript="false" />

You can also remove a validation control’s client-side capability programmatically (shown in

Listing 4-21)

Listing 4-21: Removing the client-side capabilities programmatically

VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

RequiredFieldValidator1.EnableClientScript = False

End Sub

C#

protected void Page_Load(Object sender, EventArgs e) {

RequiredFieldValidator1.EnableClientScript = false;

}

Trang 8

Another option is to turn off the client-side script capabilities for all the validation controls on a page

from within thePage_Loadevent This can be rather helpful if you want to dynamically decide not to

allow client-side validation This is illustrated in Listing 4-22

Listing 4-22: Disabling all client-side validations from the Page_Load event

VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

For Each bv As BaseValidator In Page.Validators

bv.EnableClientScript = False

Next

End Sub

C#

protected void Page_Load(Object sender, EventArgs e) {

foreach(BaseValidator bv in Page.Validators)

{

bv.EnableClientScript = false;

}

}

Looking for each instance of aBaseValidatorobject in the validators contained on an ASP.NET page,

thisFor Eachloop turns off client-side validation capabilities for each and every validation control the

page contains

Using Images and Sounds

for Error Notifications

So far, we have been displaying simple textual messages for the error notifications that come from the

validation server controls In most instances, you are going to do just that — display some simple

textual messages to inform end users that they input something into the form that doesn’t pass your

validation rules

An interesting tip regarding the validation controls is that you are not limited to just text — you can also use images and sounds for error notifications

To do this, you use theTextproperty of any of the validation controls To use an image for the error, you can simply place some appropriate HTML as the value of this property This is illustrated in Listing 4-23 Listing 4-23: Using images for error notifications

<asp:RequiredFieldValidator ID="RequiredFieldValidator1"

Runat="server" Text=’<img src="error.gif">’

ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

As you can see from this example, instead of some text being output to the Web page, the value of the

Textproperty is an HTML string This bit of HTML is used to display an image Be sure to notice the use

of the single and double quotation marks so you won’t get any errors when the page is generated in the browser This example produces something similar to what is shown in Figure 4-11

Trang 9

Figure 4-11

The other interesting twist you can create is to add a sound notification when the end user errs You can

do this the same way you display an image for error notifications Listing 4-24 shows an example of this

Listing 4-24: Using sound for error notifications

<asp:RequiredFieldValidator ID="RequiredFieldValidator1"

Runat="server" Text=’<bgsound src="C: \Windows\Media\tada.wav">’

ControlToValidate="TextBox1" EnableClientScript="False">

</asp:RequiredFieldValidator>

You can find a lot of the Windows system sounds in theC:\Windows\Mediadirectory In this example, the

Textuses the<bgsound>element to place a sound on the Web form (works only with Internet Explorer)

The sound is played only when the end user triggers the validation control

When working with sounds for error notifications, you have to disable the client-side script capability

for that particular control because if you do not, the sound plays when the page is loaded in the browser,

whether or not a validation error has been triggered

Wor king with Validation Groups

In many instances, developers want to place more than one form on a single page This was always

possible in ASP.NET 1.0/1.1 because different button clicks could be used to perform different server-side

events Some issues related to this type of construction were problematic, however

Trang 10

One of these issues was the difficulty of having validation controls for each of the forms on the page.

Different validation controls were often assigned to two distinct forms on the page When the end user submitted one form, the validation controls in the other form were fired (because the user was not work-ing with that form), thereby stoppwork-ing the first form from bework-ing submitted

Figure 4-12, for example, shows a basic page for the St Louis NET User Group that includes two forms

Figure 4-12

One of the forms is for members of the site to supply their usernames and passwords to log into the

Members Only section of the site The second form on the page is for anyone who wishes to sign up for the user group’s newsletter Each form has its own button and some validation controls associated with

it The problem arises when someone submits information for one of the forms For instance, if you were

a member of the group, you would supply your username and password, and click the Login button

The validation controls for the newsletter form would fire because no e-mail address was placed in that particular form If someone interested in getting the newsletter places an e-mail address in the last text

box and clicks the Sign-up button, the validation controls in the first form fire because no username and password were input in that form

ASP.NET 3.5 provides you with aValidationGroupproperty that enables you to separate the validation controls into separate groups It enables you to activate only the required validation controls when an

Ngày đăng: 05/07/2014, 18:20

TỪ KHÓA LIÊN QUAN