如何:使用自定义函数对 ASP.NET 服务器控件进行验证
更新:2007 年 11 月
如果现有的 ASP.NET 验证控件无法满足需求,您可以定义一个自定义的服务器端验证函数,然后使用 CustomValidator 控件来调用它。您还可以通过编写 ECMAScript (JavaScript) 函数,重复服务器端方法的逻辑,从而添加客户端验证,在提交页面之前检查用户输入内容。
即使使用了客户端检查,您也应该执行服务器端的验证。服务器端的验证有助于防止用户通过禁用或更改客户端脚本来避开验证。
安全说明: |
---|
默认情况下,ASP.NET 网页自动验证是否有恶意用户试图向您的应用程序发送脚本或 HTML 元素。有关更多信息,请参见脚本侵入概述。 |
使用自定义函数在服务器上验证
将一个 CustomValidator 控件添加到页面中并设置下列属性:
属性
说明
正在验证的控件的 ID。
这些属性指定验证失败时要显示的错误的文本和位置。有关详细信息,请参见 如何:控制 ASP.NET 服务器控件的验证错误信息显示。
为控件的 ServerValidate 事件创建一个基于服务器的事件处理程序。这一事件将被调用来执行验证。方法具有如下签名:
Protected Sub CustomValidator1_ServerValidate(ByVal _ source As System.Object, ByVal args As _ System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles CustomValidator1.ServerValidate End Sub
protected void ValidationFunctionName(object source, ServerValidateEventArgs args) { }
source 参数是对引发此事件的自定义验证控件的引用。属性 args.Value 将包含要验证的用户输入内容。如果值是有效的,则将 args.IsValid 设置为 true;否则设置为 false。
下面的代码示例显示了如何创建自定义验证。事件处理程序确定用户输入是否为 8 个字符或更长。
Protected Sub TextValidate(ByVal source As System.Object, _ ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles CustomValidator1.ServerValidate args.IsValid = (args.Value.Length >= 8) End Sub
protected void TextValidate(object source, ServerValidateEventArgs args) { args.IsValid = (args.Value.Length >= 8); }
使用如下代码将事件处理程序绑定到方法:
<asp:textbox id="TextBox1" runat="server"></asp:textbox> <asp:CustomValidator id="CustomValidator1" runat="server" OnServerValidate="TextValidate" ControlToValidate="TextBox1" ErrorMessage="Text must be 8 or more characters."> </asp:CustomValidator>
<asp:textbox id="TextBox1" runat="server"></asp:textbox> <asp:CustomValidator id="CustomValidator1" runat="server" OnServerValidate="TextValidate" ControlToValidate="TextBox1" ErrorMessage="Text must be 8 or more characters."> </asp:CustomValidator>
在 ASP.NET 网页代码中添加测试代码,以检查有效性。有关详细信息,请参见 如何:以编程方式测试 ASP.NET 服务器控件的有效性。
在客户端创建自定义验证逻辑
使用 ECMAScript (JavaScript、JScript) 创建验证函数。
下面的代码示例解释了自定义客户端验证。源自页的摘要将显示由 CustomValidator 控件引用的 TextBox 控件。验证控件调用名为 validateLength 的客户端脚本函数,以确认用户在 TextBox 控件中输入了至少 8 个字符。
<script type="text/javascript"> function validateLength(oSrc, args){ args.IsValid = (args.Value.length >= 8); } </script>
<script type="text/javascript"> function validateLength(oSrc, args){ args.IsValid = (args.Value.length >= 8); } </script>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" runat="server" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" runat="server" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
在 ASP.NET 网页代码中添加测试代码,以检查有效性。有关详细信息,请参见 如何:以编程方式测试 ASP.NET 服务器控件的有效性。