<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="此用户名已注册过" ControlToValidate = "txtName" OnServerValidate ="ValidateName">
</asp:CustomValidator>
,aspx.cs
public void ValidateName(Object sender, ServerValidateEventArgs args)
{
SqlConnection myConn = new SqlConnection("Data Source=(local);Initial Catalog=Csharp;Integrated Security=True");
myConn.Open();
SqlCommand myCmd = new SqlCommand("select use_account from users", myConn);
SqlDataAdapter myDa = new SqlDataAdapter(myCmd);
DataSet myDs = new DataSet();
myDa.Fill(myDs);
for (int i = 0; i < myDs.Tables[0].Rows.Count; i++)
{
if (args.Value.ToString() == myDs.Tables[0].Rows[i][0].ToString())
{
args.IsValid = false;
break;
}
else
{
args.IsValid = true;
}
}
}
通过自定义服务器端的函数代码,与前台验证控件关联,形成一种假客户端—当前页面验证的效果。
以上面前台验证控件这段代码为例:
ErrorMessage属性表示当验证不合法时,出现错误的信息;
ControlToValidate属性表示需验证的控件ID;
OnServerValidate属性表示与自定义函数相关联,以在服务器上执行验证;
ASP.Net提供了如下的验证控件:
RequiredFieldValidator:字段必填。
RangeValidator:值在给定的最大值、最小值之间;
CompareValidator:用于比较两个值的关系是否满足要求或者是否是指定类型的数据;
RegularExpressionValidat
CustomValidator:自定义验证。
RequiredFieldValidator
ControlToValidate设定要验证的控件,Text设置为当被验证的控件属性为空的时候显示的错误信息,Text不仅可以写普通文本,还可以写任何HTML内容。也可以使用ErrorMessage设置发送错误的时候显示的消息。
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="不能为空"></asp:RequiredFieldValidator>
有时候控件如果是默认值也认为是空值,比如下拉列表的选中值为”--选中性别--”,文本框的值为”填入搜索关键字”,只要将RequiredFieldValidator的InitialValue属性设置为” --选中性别--”、” 填入搜索关键字”就可以了。
<asp:TextBox ID="TextBox1" runat="server">请输入关键词</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" ErrorMessage="不能为空"
InitialValue="请输入关键词”></asp:RequiredFieldValidator>
Validator共性
页面中的IsValid属性用来判断页面中的所有Validator是否校验通过,只有都校验通过才为True,即使页面中的Validator服务端校验报错(禁用javascript就可以跳过客户端校验),在服务端方法中的业务代码(比如btn1_Click)也会被执行,因此如果代码在数据校验不通过的不能执行则需要判断IsValid的值。
所有验证控件都有Display属性,用来决定如何显示错误信息。三个值:Static:没有错误信息的时候控件的visiblity样式为hidden来实现隐藏;Dynamic:没有错误信息的时候控件display样式为none来实现隐藏。
这两者的区别是display:none和visibility:hidden隐藏的区别是, visibility:hidden隐藏控件仍然会占据空间,而display:none隐藏则不会占空间。display属性还可以设置为none(用来配合后面讲的ValidationSummary)
你?好?<span style="visibility:hidden">你看不见我</span>?
几乎所有控件都有ControlToValidate、Text属性,不再额外说,所有验证控件都几乎在客户端和服务器端都要进行校验。
如果在一个页面中同时防止注册和登录表单,那么他们的验证就会同时进行,这样虽然只是登录,但是注册的验证也会触发,可以使用验证组来解决这个问题,将同一组的控件(表单,提交按钮等)的ValidationGroup设为相同的值就可以,这样的话,和Button等触发事件的控件的ValidationGroup相同的控件才会校验。
如果将按钮控件(Button、ImageButton、LinkButton)的CausesValidation属性设置为false,则这个按钮的点击不触发校验。为了区别一些跟校验按钮没有关系的一些按钮,这样其他跟表单没有关系的按钮还可以执行相应的操作,不需要校验表单中的数据。
26验证控件2
RangeValidator
RangeValidator控件的属性:MinimumValue属性、MaximumValue属性为最大、最小值,Type属性为数据类型(stirng 、integer、double、data、currency(货币)等)。例子:年龄,毕业日期在合理的范围内。
RangeValidator、CompareValidator、RegularExpressionValidat
CompareValidator
CompareValidator的属性:Type属性同RangeValidator。Operator属性,比较操作符,可选值DataTypeCheck(数据类型)、Equal(=)、GreaterThan(>)、GreaterThanEqual(>=)、LessThan(<)、LessThanEqual(<=)、 NotEqual(!=)。ValueToCompare属性,所比较的运算符右边的值。ControlToCompare属性,设定与另外一个控件的值进行比较。
校验数据类型,需要修改:ControlToValidate设定要校验的控件,Type设定要校验的数据类型,Operator设定为DataTypeCheck。
要进行范围比较,需要设定, ControlToValidate设定要校验的控件,Type设定要校验的数据类型,Operator设定为比较的运算符,ValueToCompare设定要比较的值。
与另外一个控件的值进行比较, 需要设定, ControlToValidate设定要校验的控件,Type设定要校验的数据类型,Operator设定为比较的运算符,ControlToCompare设置为要比较的控件(运算符右边的控件)
练习:转正日期不能大于入职日期。
高级Validator
RegularExpressionValidat
CustomValidator,自定义验证控件。当ASP.Net内置的验证控件无法满足要求的时候可以使用CustomValidator。
onservervalidate事件为服务端的校验函数,在事件处理函数中读取args.Value来获得校验的值,如果值合法则将args.IsValid设置为true,否则设置为false。如果为ClientValidationFunction
练习:自定义校验,试文本框中输入的值必须为1,在服务端和客户端分别校验。
.aspx:
<head runat="server">
</head>
<body>
</body>
.aspx.cs:
27验证控件练习点评
练习:根据月份显示天数。
客户端:
<head runat="server">
</head>
<body>
</body>
服务端:
28验证消息汇总
使用Validator错误消息会显示在放置的位置,这样有两个可能的问题:如果表单非常大,用户看不到全部的错误消息,希望把错误消息几种显示在提交按钮旁边;如果错误信息非常多且会散落各地,希望能集中显示。
ValidationSummary控件用来集中显示错误消息。每个验证控件都有ErrorMessage、Text两个属性,ErrorMessage是用来显示到ValidatorSummary中的值,Text是用来显示到Validator位置的值,如果Text为空,则ErrorMessage会同时显示到ValidationSummary和控件的位置,能知道指的是那个控件:ErrorMessage要详细一些(比如”用户名不能为空”,不能是”不能为空”等),这样才能从ValidationSummary每条错误信息中读取值出来。
ValidationSummary的属性:DiaplayMode,显示模式:ShowMessageBox,用户同时显示错误对话框。