当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 深入讲解 ASP+ 验证(四)

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

ASP.NET 中的 深入讲解 ASP+ 验证(四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 32 ::
收藏到网摘: n/a

有效性规则和有用的错误信息

每个验证器会显示有关特定控件特定情况的特定错误信息。其中有一些确认是否有效的规则,开始,您作为一个开发人员可能会有些混淆,但是如果要生成对用户有实际帮助的错误信息,这些规则是必要的。

所有空的验证器(除了 RequiredFieldValidator)均会被认为有效。如果某个空值无效,您通常需要一个 RequiredFieldValidator 和一个其它验证器。您需要这样做,因为一般情况下,您总是希望对空验证器和有效性显示不同的错误信息。您也可以使用不明确的信息,例如“您必须输入一个值,并且该值必须在 1 和 10 之间”。

在输入字段无法转换为指定数据类型时使用的另一个特殊规则与 CompareValidator 和 RangeValidator 有关。对指定了 ControlToCompare 的 CompareValidator 进行的有效性评估过程类似如下所述:

如果 ControlToValidate 引用的输入字段为空,则有效。
如果 ControlToValidate 引用的输入字段无法转换成所需数据类型,则无效。
如果 ControlToCompare 引用的输入字段无法转换成所需数据类型,则有效。
输入字段转换成所需数据类型并进行比较。
第三步看起来有些不符合直觉。之所以这样评估,是因为如果验证器同时检查多个字段的有效性,很难为该验证器写出有意义的错误信息。应使用一个独立的验证器来报告 ControlToCompare 输入字段中的错误情况。RangeValidator 的工作方式类似,具有 maximum 和 minimum 属性。


Enabled、Visible 和 Display 属性的作用

验证器的 Enabled、Visible 和 Display 属性之间的区别可能不是非常明显。

Display=None 可以用来指定验证器不直接显示任何内容,但是仍然进行评估,仍然影响总体的有效性,并且仍可以将错误放在客户机和服务器上的摘要中。对于客户端验证,这些值确定使用可见性样式特性还是使用显示样式特性来打开或关闭验证器。对于服务器端验证,Display=Dynamic 表示输入有效时不显示任何内容,而 Display=Static 表示显示一个不换行的空格 (" ")。使用最后一个设置是为了表中只包含验证器的单元格在有效时,不会折叠成不显示任何内容。

为什么不只使用 Visible=false 使验证器不可见呢?在 ASP+ 中,控件的 Visible 属性有许多含义:Visible=false 的控件根本不会被处理来预显示或显示。正是因为这种含义,验证器的 Visible=false 意味着不仅不会显示任何内容,而且无法使用。不会对这样的验证器进行评估,不会影响页面的有效性,也不会将错误放在摘要中。

Enabled 则为中性。对于大多数情况,Enabled=false 与 Visible=false 的效果完全相同。在 Beta 1 版或更高版本中,存在一个重要的区别:在客户端验证中,禁用的验证器仍会发送到浏览器中,但是处于禁用状态。您可以使用客户端脚本中的 ValidatorEnable 函数激活该验证器。

使用 Visible 或 Enabled 控制是否进行验证时,应注意上述服务器上的事件顺序。或者在验证之前进行更改,或者在更改之后重新验证。否则,它们的 IsValid 值不会将更改反映到属性上。


CustomValidator 控件

扩展验证框架最简单的方法是使用 CustomValidator 控件。该控件既可以用来执行其它验证控件无法进行的验证,也可以执行需要访问服务器上信息(例如数据库或 Web 服务)的验证。

如果添加了只定义一个服务器验证函数的 CustomValidator,您会注意到,该验证器并不参与客户端验证。当用户使用 tab 键在各字段之间切换时,CustomValidator 不会更新,并且需要往返服务器一次以执行其验证。如果要使用 CustomValidator 执行不需要任何服务器上信息的检查,您也可以使用 ClientValidationFunction 属性让验证器完全参与客户端验证。假设您提供了一个 ClientValidationFunction,理想情况下,应与服务器验证处理程序执行完全相同的检查。但实际上,只是执行该验证的一部分。客户端验证函数进行的验证不要超过在服务器上执行的验证,因为黑客很容易绕过该验证函数。

以下是在客户机和服务器上使用 CustomValidator 的一个简单示例,只检查输入是否是偶数。以下先介绍服务器函数(在 C# 中):

public bool ServerValidation(object source, string value) {
try {
int i = int.FromString(value);
return ((i % 2) == 0);
} catch {
return false;
}
}

以下是该函数在客户机上的声明方法,以及一个执行相同检查的客户端验证函数。这通常是 JScript 形式,不过如果您的目标是 Microsoft® Internet Explorer,也可以使用 VBScript® 形式。

<asp:CustomValidator id="customVal2" runat=server
ErrorMessage="数字不可以被 2 除!"
ControlToValidate="txtCustomData"
OnServerValidationFunction=ServerValidation
ClientValidationFunction="CheckEven" /><br>
Data Field : <asp:TextBox id="txtCustomData" runat="server" />
<script language=javascript>
&l