™ CustomValidator通过客户端或服务器端检查值
验证控件的使用:一步一步学注册——RegularExpressionValidator控件
上篇博客写到通过正则表达式来检查输入值,如果学好正则表达式,我相信,将来对系统的健壮性有很大的帮助。本篇博客通过客户端或者服务器端的函数来检查值,也是验证数据的一个重要控件之一。
首先举例来说在服务器端检查值,实现注册时判断该用户是否已经存在。
在举例之前,我们有必要结合MSDN了解一下该控件:
语法:<asp:CustomValidator />
方法:OnServerValidate 为 CustomValidator 控件引发 ServerValidate 事件。
事件: ServerValidate 其语法为:
<asp:CustomValidator OnServerValidate="ServerValidateEventHandler" />
在服务器上执行验证时发生。要想在服务器端验证,就得为 ServerValidate 提供一个处理程序,可以通过使用作为参数传递到该时间出来程序的ServerValidateEventArgs 对象的 Value 属性来访问要验证的输入控件中的字符串。
然后将验证的结果存储在 ServerValidateEventArgs 对象的 IsValid 属性中。
代码:
数据库:数据库login,表名:login
JavaScript代码
之前要引用空间
<%@ Import Namespace= "System.Data.SqlClient " %>
<script runat="server">
void btnRegist_OnClick(object sender, EventArgs e)
{
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
string UserName = args.Value;
SqlConnection con = new SqlConnection("server=.;database=login;uid=sa;pwd=123456;");
con.Open();
SqlCommand cmd = new SqlCommand("select Count(*) from login where userName='" + UserName + "'", con);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
{
args.IsValid = false ;
}
else
{
args.IsValid = true ;
}
}
catch (Exception)
{
args.IsValid = false;
}
}
</script>
控件:
<td>
<asp:TextBox ID="txtUserName" runat="server" CssClass ="textbox"></asp:TextBox>
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="txtUserName"
Display="Static"
ErrorMessage="该用户已存在!"
ForeColor="red"
OnServerValidate="ServerValidation"
runat="server"/>
</td>
效果显示:
下面是客户端验证:
验证控件总是在服务器上执行验证。 它们还具有完整的客户端实现,从而使支持脚本的浏览器(如 Microsoft Internet Explorer 4.0 以及更高版本)可以在客户端上执行验证。 客户端验证通过在向服务器发送用户输入前检查用户输入来增强验证过程。 这使得在提交窗体前即可在客户端检测到错误,从而避免了服务器端验证所需要的信息的往返行程。
若要创建客户端验证函数,首先要添加前面描述的服务器端验证函数。 然后,将客户端验证脚本函数添加到 ASP.NET (.aspx) 页中。
函数的JScript形式:
function ValidationFunctionName(source, arguments)
source存储验证控件。
arguments参数是一个具有以下两个属性的对象:Value 和 IsValid。 客户端验证时可以通过使用 arguments 参数的 Value 属性来访问要验证的输入控件中的字符串。 通过设置 arguments 参数的 IsValid 属性来返回验证结果。
重要的属性是:ClientValidationFunction 属性。指定与 CustomValidator 控件关联的客户端验证脚本函数的名称。 由于该脚本函数在客户端执行,因此该函数必须使用目标浏览器支持的语言(如 VBScript 或 JScript)来编写。
MSDN警告:
警告 |
---|
在使用验证程序控件时,应该始终首先检查服务器端验证的结果,然后再执行处理。 在回发之后但调用事件方法之前,该页将调用验证程序控件并将它们的结果聚集到Page.IsValid 属性中。 (您还可以使用 Validate 方法显式调用验证程序控件。)在您自己的代码中,应该先检查 Page.IsValid 属性是否返回了 true,然后再处理输入。 即使支持脚本的浏览器可能在验证检查失败时禁止客户端上发生回发,您也应该总是先检查服务器代码中的 Page.IsValid,然后再处理验证的数据。 |
举例:
<html>
<head>
<title>Custom </title>
<script runat="server">
void btnRegist_OnClick(object sender, EventArgs e)
{
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
string UserName = args.Value;
SqlConnection con = new SqlConnection("server=.;database=login;uid=sa;pwd=123456;");
con.Open();
SqlCommand cmd = new SqlCommand("select Count(*) from login where userName='" + UserName + "'", con);
int count = Convert.ToInt32(cmd.ExecuteScalar());
args.IsValid = (count == 0);
}
catch (Exception)
{
args.IsValid = false;
}
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="Judge"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="该用户已存在!"
ForeColor="red"
runat="server"/>
<br />
<asp:Button id="btnRegist"
Text="注册"
OnClick="btnRegist_OnClick"
runat="server"/>
</form>
</body>
</html>
<script language="javascript" type ="text/javascript">
function Judge(source, arguments) {
if (arguments.Value == 0) {
arguments.IsValid = false;
}
else
{
arguments.IsValid = true;
}
}
</script>