CustomValidator 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
对输入控件执行用户定义的验证。
public ref class CustomValidator : System::Web::UI::WebControls::BaseValidator
public class CustomValidator : System.Web.UI.WebControls.BaseValidator
type CustomValidator = class
inherit BaseValidator
Public Class CustomValidator
Inherits BaseValidator
- 继承
示例
以下代码示例演示如何创建服务器端 CustomValidator 控件。
重要
此示例具有一个接受用户输入的文本框,这是一个潜在的安全威胁。 默认情况下,ASP.NET 网页验证用户输入是否不包含脚本或 HTML 元素。 有关详细信息,请参阅脚本侵入概述。
<%@ 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>
<%@ Page Language="VB" 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">
Sub ValidateBtn_OnClick(sender As Object, e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(source As Object, args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 2) = 0)
Catch ex As Exception
args.IsValid = false
End Try
End Sub
</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>
下面的代码示例演示如何创建客户端 CustomValidator 控件。
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
<head>
<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-Name="Verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Name="verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
<script language="javascript">
function ClientValidate(source, arguments)
{
if (arguments.Value % 2 == 0 ){
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}
</script>
<%@ Page Language="VB" AutoEventWireup="True" %>
<html>
<head>
<script runat="server">
Sub ValidateBtn_OnClick(sender As Object, e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(source As Object, args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num Mod 2) = 0)
Catch ex As Exception
args.IsValid = False
End Try
End Sub
</script>
</head>
<body>
<form id="Form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Name="Verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Name="verdana"
Font-Size="10pt"
runat="server"/>
<p>
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
<script language="javascript">
function ClientValidate(source, arguments)
{
if (arguments.Value % 2 == 0 ){
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}
</script>
注解
CustomValidator使用 控件为输入控件提供用户定义的验证函数。 控件 CustomValidator 是它验证的输入控件的单独控件,可用于控制验证消息的显示位置。
验证控件始终在服务器上执行验证。 它们还具有完整的客户端实现,允许启用脚本的浏览器 ((例如 Microsoft Internet Explorer 4.0 及更高版本) )在客户端上执行验证。 客户端验证通过在用户输入发送到服务器之前检查用户输入来增强验证过程。 这样就可以在提交表单之前在客户端上检测到错误,从而避免服务器端验证所需的信息往返。
若要创建服务器端验证函数,请为 ServerValidate 执行验证的事件提供处理程序。 可以使用传入事件处理程序的 对象的 属性ServerValidateEventArgs作为参数来访问Value要验证的输入控件中的字符串。 然后,验证结果将存储在 对象的 属性中IsValidServerValidateEventArgs。
若要创建客户端验证函数,请首先添加前面所述的服务器端验证函数。 接下来,将客户端验证脚本函数添加到 ASP.NET (.aspx) 页。
如果使用 Visual Basic Scripting Edition (VBScript) ,则函数必须采用以下形式:
Sub ValidationFunctionName(source, arguments)
如果使用 JScript,函数必须采用以下形式:
function ValidationFunctionName(source, arguments)
参数 source 是对为控件呈现的 <span> 元素的 CustomValidator 引用。 这允许以编程方式控制 <span> 标记,例如修改 InnerHtml 属性。 参数 arguments 是具有两个属性的对象:Value 和 IsValid。 此参数允许获取控件的值,以便根据自定义验证例程进行验证并指示该值是否有效。
ClientValidationFunction使用 属性指定与 CustomValidator 控件关联的客户端验证脚本函数的名称。 由于脚本函数是在客户端上执行的,因此该函数必须采用目标浏览器支持的语言,例如 VBScript 或 JScript。
注意
在 CustomValidator 控件中使用 UpdatePanel 控件时,请确保验证程序控件和它关联的控件位于同一面板中。 有关使用 UpdatePanel 控件进行部分页更新的详细信息,请参阅 分页呈现概述。
与服务器端验证一样,使用 参数的 属性访问 Value 输入控件中要验证的 arguments 字符串。 通过设置 IsValid 参数的 属性 arguments 返回验证结果。
注意
使用验证程序控件时,在执行任何处理之前,应始终检查服务器端验证的结果。 在回发后,但在调用事件方法之前,页面会调用验证程序控件,并将其结果聚合到 属性中 Page.IsValid 。 (还可以使用 Validate 方法显式调用验证程序控件。) 在你自己的代码中,应在处理输入之前检查属性是否 Page.IsValid 返回 true 。 尽管如果验证检查失败,已启用脚本的浏览器可能会阻止客户端上发生回发,但在处理已验证的数据之前,也应始终签 Page.IsValid 入服务器代码。
多个验证控件可以与单个输入控件一起使用,以验证不同的条件。 例如,可以对一个 TextBox 控件应用多个验证控件,该控件允许用户输入要添加到购物车的项数量。 可以使用 控件 CustomValidator 来确保指定的值小于库存中的数量,并使用 RequiredFieldValidator 控件来确保用户向控件 TextBox 输入值。
注意
如果输入控件为空,则不会调用任何验证函数,验证会成功。 RequiredFieldValidator使用 控件要求用户在输入控件中输入数据。
可以在不设置 ControlToValidate 属性的情况下使用 CustomValidator 控件。 在验证多个输入控件或验证无法与验证控件(例如控件) CheckBox 一起使用的输入控件时,通常会执行此操作。 在这种情况下,Value传递给事件的事件处理程序ServerValidate和客户端验证函数的参数的 属性arguments始终包含空字符串 (“”) 。 但是,仍会根据需要调用这些验证函数,以确定服务器和客户端上的有效性。 若要访问要验证的值,必须以编程方式引用要验证的输入控件,然后从相应的属性检索值。 例如,若要验证 CheckBox 服务器上的控件,请不要设置 ControlToValidate 验证控件的 属性,并将以下代码用于事件的处理程序 ServerValidate 。
Sub ServerValidation (source As object, args As ServerValidateEventArgs)
args.IsValid = (CheckBox1.Checked = True)
End Sub
void ServerValidation (object source, ServerValidateEventArgs args)
{
args.IsValid = (CheckBox1.Checked == true);
}
有关验证控件的详细信息,请参阅 BaseValidator。
可访问性
有关如何配置此控件以便生成符合辅助功能标准的标记的信息,请参阅 Visual Studio 中的辅助功能和 ASP.NET 和 ASP.NET 控件和辅助功能。
构造函数
| CustomValidator() |
初始化 CustomValidator 类的新实例。 |
属性
| AccessKey |
获取或设置使您得以快速导航到 Web 服务器控件的访问键。 (继承自 WebControl) |
| Adapter |
获取控件的浏览器特定适配器。 (继承自 Control) |
| AppRelativeTemplateSourceDirectory |
获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。 (继承自 Control) |
| AssociatedControlID |
不支持此属性。 (继承自 BaseValidator) |
| Attributes |
获取与控件的特性不对应的任意特性(只用于呈现)的集合。 (继承自 WebControl) |
| BackColor |
获取或设置 Web 服务器控件的背景色。 (继承自 WebControl) |
| BindingContainer |
获取包含该控件的数据绑定的控件。 (继承自 Control) |
| BorderColor |
获取或设置 Web 控件的边框颜色。 (继承自 WebControl) |
| BorderStyle |
获取或设置 Web 服务器控件的边框样式。 (继承自 WebControl) |
| BorderWidth |
获取或设置 Web 服务器控件的边框宽度。 (继承自 WebControl) |
| ChildControlsCreated |
获取一个值,该值指示是否已创建服务器控件的子控件。 (继承自 Control) |
| ClientID |
获取由 ASP.NET 生成的 HTML 标记的控件 ID。 (继承自 Control) |
| ClientIDMode |
获取或设置用于生成 ClientID 属性值的算法。 (继承自 Control) |
| ClientIDSeparator |
获取一个字符值,该值表示 ClientID 属性中使用的分隔符字符。 (继承自 Control) |
| ClientValidationFunction |
获取或设置用于验证的自定义客户端脚本函数的名称。 |
| Context |
为当前 Web 请求获取与服务器控件关联的 HttpContext 对象。 (继承自 Control) |
| Controls |
获取 ControlCollection 对象,该对象表示 UI 层次结构中的指定服务器控件的子控件。 (继承自 Control) |
| ControlStyle |
获取 Web 服务器控件的样式。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
| ControlStyleCreated |
获取一个值,该值指示是否已为 Style 属性创建了 ControlStyle 对象。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
| ControlToValidate |
获取或设置要验证的输入控件。 (继承自 BaseValidator) |
| CssClass |
获取或设置由 Web 服务器控件在客户端呈现的级联样式表 (CSS) 类。 (继承自 WebControl) |
| DataItemContainer |
如果命名容器实现 IDataItemContainer,则获取对命名容器的引用。 (继承自 Control) |
| DataKeysContainer |
如果命名容器实现 IDataKeysControl,则获取对命名容器的引用。 (继承自 Control) |
| DesignMode |
获取一个值,该值指示是否正在使用设计图面上的一个控件。 (继承自 Control) |
| Display |
获取或设置验证控件中错误消息的显示行为。 (继承自 BaseValidator) |
| EnableClientScript |
获取或设置一个值,该值指示是否启用客户端验证。 (继承自 BaseValidator) |
| Enabled |
获取或设置一个值,该值指示是否启用验证控件。 (继承自 BaseValidator) |
| EnableTheming |
获取或设置一个值,该值指示主题是否应用于该控件。 (继承自 WebControl) |
| EnableViewState |
获取或设置一个值,该值指示服务器控件是否向发出请求的客户端保持自己的视图状态以及它所包含的任何子控件的视图状态。 (继承自 Control) |
| ErrorMessage |
获取或设置验证失败时 ValidationSummary 控件中显示的错误消息的文本。 (继承自 BaseValidator) |
| Events |
获取控件的事件处理程序委托列表。 此属性为只读。 (继承自 Control) |
| Font |
获取与 Web 服务器控件关联的字体属性。 (继承自 WebControl) |
| ForeColor |
获取或设置验证失败后显示的消息的颜色。 (继承自 BaseValidator) |
| HasAttributes |
获取一个值,该值指示控件是否具有特性集。 (继承自 WebControl) |
| HasChildViewState |
获取一个值,该值指示当前服务器控件的子控件是否具有任何已保存的视图状态设置。 (继承自 Control) |
| Height |
获取或设置 Web 服务器控件的高度。 (继承自 WebControl) |
| ID |
获取或设置分配给服务器控件的编程标识符。 (继承自 Control) |
| IdSeparator |
获取用于分隔控件标识符的字符。 (继承自 Control) |
| IsChildControlStateCleared |
获取一个值,该值指示该控件中包含的控件是否具有控件状态。 (继承自 Control) |
| IsEnabled |
获取一个值,该值指示是否启用控件。 (继承自 WebControl) |
| IsTrackingViewState |
获取一个值,用于指示服务器控件是否会将更改保存到其视图状态中。 (继承自 Control) |
| IsUnobtrusive |
获取一个值,该值指示控件是否生成非介入式 JavaScript。 (继承自 BaseValidator) |
| IsValid |
获取或设置一个值,该值指示关联的输入控件是否通过验证。 (继承自 BaseValidator) |
| IsViewStateEnabled |
获取一个值,该值指示是否为该控件启用了视图状态。 (继承自 Control) |
| LoadViewStateByID |
获取一个值,该值指示控件是否通过 ID 而不是索引参与加载其视图状态。 (继承自 Control) |
| NamingContainer |
获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 ID 属性值的服务器控件。 (继承自 Control) |
| Page |
获取对包含服务器控件的 Page 实例的引用。 (继承自 Control) |
| Parent |
获取对页 UI 层次结构中服务器控件的父控件的引用。 (继承自 Control) |
| PropertiesValid |
获取一个值,该值指示由 ControlToValidate 属性指定的控件是否是有效的控件。 (继承自 BaseValidator) |
| RenderingCompatibility |
获取一个值,该值指定呈现的 HTML 将与之兼容的 ASP.NET 版本。 (继承自 Control) |
| RenderUplevel |
获取一个值,该值指示客户端的浏览器是否支持“上一级”呈现。 (继承自 BaseValidator) |
| SetFocusOnError |
获取或设置一个值,该值指示在验证失败时是否将焦点设置到 ControlToValidate 属性指定的控件上。 (继承自 BaseValidator) |
| Site |
获取容器信息,该容器在呈现于设计图面上时承载当前控件。 (继承自 Control) |
| SkinID |
获取或设置要应用于控件的外观。 (继承自 WebControl) |
| Style |
获取将在 Web 服务器控件的外部标记上呈现为样式特性的文本特性的集合。 (继承自 WebControl) |
| SupportsDisabledAttribute |
获取一个值,该值指示在控件的 |
| TabIndex |
获取或设置 Web 服务器控件的选项卡索引。 (继承自 WebControl) |
| TagKey |
获取用于呈现 Label 控件的 HTML 标记。 (继承自 Label) |
| TagName |
获取控件标记的名称。 此属性主要由控件开发人员使用。 (继承自 WebControl) |
| TemplateControl |
获取或设置对包含该控件的模板的引用。 (继承自 Control) |
| TemplateSourceDirectory |
获取包含当前服务器控件的 Page 或 UserControl 的虚拟目录。 (继承自 Control) |
| Text |
获取或设置验证失败时验证控件中显示的文本。 (继承自 BaseValidator) |
| ToolTip |
获取或设置当鼠标指针悬停在 Web 服务器控件上时显示的文本。 (继承自 WebControl) |
| UniqueID |
获取服务器控件的唯一的、以分层形式限定的标识符。 (继承自 Control) |
| ValidateEmptyText |
获取或设置一个布尔值,该值指示是否应该验证空文本。 |
| ValidateRequestMode |
获取或设置指示控件是否检查来自浏览器的客户端输入是否具有潜在危险值的值。 (继承自 Control) |
| ValidationGroup |
获取或设置此验证控件所属的验证组的名称。 (继承自 BaseValidator) |
| ViewState |
获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态。 (继承自 Control) |
| ViewStateIgnoresCase |
获取一个值,该值指示 StateBag 对象是否不区分大小写。 (继承自 Control) |
| ViewStateMode |
获取或设置此控件的视图状态模式。 (继承自 Control) |
| Visible |
获取或设置一个值,该值指示服务器控件是否作为 UI 呈现在页上。 (继承自 Control) |
| Width |
获取或设置 Web 服务器控件的宽度。 (继承自 WebControl) |
方法
事件
| DataBinding |
当服务器控件绑定到数据源时发生。 (继承自 Control) |
| Disposed |
当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段。 (继承自 Control) |
| Init |
当服务器控件初始化时发生;初始化是控件生存期的第一步。 (继承自 Control) |
| Load |
当服务器控件加载到 Page 对象中时发生。 (继承自 Control) |
| PreRender |
在加载 Control 对象之后、呈现之前发生。 (继承自 Control) |
| ServerValidate |
在服务器上执行验证时发生。 |
| Unload |
当服务器控件从内存中卸载时发生。 (继承自 Control) |
显式接口实现
扩展方法
| FindDataSourceControl(Control) |
返回与指定控件的数据控件关联的数据源。 |
| FindFieldTemplate(Control, String) |
返回指定控件的命名容器中指定列的字段模板。 |
| FindMetaTable(Control) |
返回包含数据控件的元表对象。 |