CustomValidator.ServerValidate Event
Occurs when validation is performed on the server.
Assembly: System.Web (in System.Web.dll)
The ServerValidate event is raised when validation is performed on the server. This event is used to provide a custom validation routine for an input control, such as a TextBox control.
For more information about handling events, see Events and Delegates.
The following code example demonstrates how to specify and code a handler for a server-side CustomValidator control. It creates a custom validation routine, validates the value of a TextBox control for an even number, and then displays the result of the validation.
Security Note
|
|---|
|
This example has a text box that accepts user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements. For more information, see Script Exploits Overview. |
<%@ Page Language="C#" AutoEventWireup="True" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>CustomValidator ServerValidate Example</title> <script runat="server"> void ValidateBtn_OnClick(object sender, EventArgs e) { // Display whether the page passed validation. if (Page.IsValid) { Message.Text = "Page is valid."; } else { Message.Text = "Page is not valid!"; } } void ServerValidation(object source, ServerValidateEventArgs args) { try { // Test whether the value entered into the text box is even. int i = int.Parse(args.Value); args.IsValid = ((i%2) == 0); } catch(Exception ex) { args.IsValid = false; } } </script> </head> <body> <form id="form1" runat="server"> <h3>CustomValidator ServerValidate Example</h3> <asp:Label id="Message" Text="Enter an even number:" Font-Names="Verdana" Font-Size="10pt" runat="server" AssociatedControlID="Text1"/> <br /> <asp:TextBox id="Text1" runat="server" /> <asp:CustomValidator id="CustomValidator1" ControlToValidate="Text1" Display="Static" ErrorMessage="Not an even number!" ForeColor="green" Font-Names="verdana" Font-Size="10pt" OnServerValidate="ServerValidation" runat="server"/> <br /> <asp:Button id="Button1" Text="Validate" OnClick="ValidateBtn_OnClick" runat="server"/> </form> </body> </html>
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Labo2
4. Voeg in de ASPX aan beide lists een hardcoded item {Kies een region{ of {Kies een territory{ toe.
< div >
< asp : DropDownList ID ="ddlRegion" runat ="server">
< asp : ListItem Value ="-">-- kies region--</asp:ListItem>
</ asp : DropDownList >
< asp : DropDownList ID ="ddlTerritory" runat ="server">
< asp : ListItem Value ="-1">--kies territory--</asp:ListItem>
</ asp : DropDownList >
</ div >
5. Voeg aan de pagina default.aspx een Register directive toe die de user control registreert met tagprefix uc en tagname TerritorySelector
<% @ Register src ="wuc/wucTerritorySelector.aspx" tagname ="wucTerritory" tagprefix ="uc1" %>
6. Maak gebruik van de nieuwe tag om de usercontrol op het form te plaatsen.
< div >
< uc1 : wucTerritory ID ="wucTerritory1" runat ="server" />
</ div >
2. Test uit. Wat is er gebeurt met --Kies een region{"?
3. Los het probleem op door gebruik te maken van de AppendDataBoundItems property op True te plaatsen.
6. Ook hier weet de bulleted list niet wanneer het zijn items moet verversen. Voeg aan de page load de code toe zodat bij iedere postback de bulleted list opnieuw wordt opgevuld.!!!!
- 9/8/2011
- Dillon Bergkamp
Labo1
Vang het ServerValidate event op. Controleer in dit event of er minstens 1 domein geselecteerd is in de checkboxlist. Vul op basis van de controle de gepaste waarde in de IsValid property van de ServerValidateEventArgs.
Protected Sub cvDomeinen_ServerValidate(ByVal source AsObject, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvDomeinen.ServerValidate
Dim isOK AsBoolean = False
For Each cbl AsListItemIn cblVakken.Items
If cbl.Selected Then
isOK = True
End If
Next
If Not isOK Then
args.IsValid = False
End If
End Sub
Het laatste veld in onze usersettings form was het persoonstype waarbij de gebruiker kon kiezentussen: student, docent, oud-student, andere.
Private Sub FillPersonTypes()
ddlPersoonType.Items.Add(NewListItem("Student", "0"))
ddlPersoonType.Items.Add(NewListItem("Oud-Student", "2"))
ddlPersoonType.Items.Add(NewListItem("Docent", "1"))
ddlPersoonType.Items.Add(NewListItem("Andere", "3"))
End Sub
Protected Sub cvType_ServerValidate(ByVal source AsObject, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvType.ServerValidate
If ddlPersoonType.SelectedValue = -1 Then
args.IsValid = False
End If
End Sub
Als de gebruiker op Send klikt, nog eens een validatie:
Protected Sub btnVerzenden_Click(ByVal sender AsObject, ByVal e AsEventArgs) Handles btnVerzenden.Click
If revMail.IsValid And rfvEmail.IsValid And rfvNaam.IsValid And cvDomeinen.IsValid And cvType.IsValid = TrueThen
pnlSettingsDisplay.Visible = True
pnlSettingsForm.Visible = False
lblNameText.Text = "<b>Naam: </b>" & txtNaam.Text
lblEmailText.Text = "<b>E-mail: </b>" & txtEmail.Text
lblType.Text = ddlPersoonType.SelectedItem.Text
For Each i AsListItemIn cblVakken.Items
If i.Selected = TrueThen
lblVakken.Text &= "- " & i.Text & "</br>"
End If
Next
End If
End Sub
6. Test nu uw formulier zodat je een geldige waarde invult voor naam en email maar geen enkele waarde selecteert voor het domain. Klik op de knop btnSend en bekijkt het resultaat in uw DropDownList. Niet echt wat je verwacht niet?
7. Het Load event wordt bij iedere request opnieuw uitgevoerd maar het ASP.NET webform onthoudt blijkbaar de items in de dropdownlist bij een postback. Pas de code in het load event aan zodat het opvullen van de dropdownlist enkel gebeurd als er geen postback is. Test het voorgaande scenario opnieuw uit en controleer of de dropdownlist nu wel correct werkt.
Protected Sub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
If IsPostBack = FalseThen
FillPersonTypes()
End If
End Sub
- 9/8/2011
- Dillon Bergkamp
Security Note