ASP

本类阅读TOP10

·asp常用数据库连接方法和技巧
·无组件生成BMP验证码
·一些常用的辅助代码 (网络收藏)
·JavaScript实现的数据表格:冻结列、调整列宽和客户端排序
·VisualStudio.NET_2003及其 MSDN 下载地址
·ASP模拟MVC模式编程
·图片以二进制流输出到网页
·MD5加密算法 ASP版
·ASP.NET编程中的十大技巧
·改进 ASP 的字符串处理性能

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
解决CustomValidator控件不能验证控件值为空的问题

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在论坛上看到有关CustomValidator控件验证控件值为空的问题http://community.csdn.net/Expert/topic/3772/3772658.xml?temp=.9461634,正好我也遇到过,解决方法就是不要指定CustomValidator 控件的ControlToValidate,这样在提交的时候回进行验证
,代码如下:
<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>
</head>
<body>

   <form runat="server" id="Form1" >
      <asp:TextBox id="Text1"
           runat="server" />

      <asp:CustomValidator id="CustomValidator1"
           ClientValidationFunction="ClientValidate"
           Display="Static"
           ErrorMessage="不能为空!"
           ForeColor="green"
           Font-Name="verdana"
           Font-Size="10pt"
           runat="server"/>
 <br/>
      <asp:Button id="Button1"
           Text="Validate"
           runat="server"/>
   </form>
 
</body>
</html>

<script language="javascript">
<!--
function ClientValidate(sender, args)
{
 if(Form1.Text1.value.length<=0)
 {
  args.IsValid = false;
 }else{
  args.IsValid = true;
 }
}
// -->
</script>

问题分析:
与所有其它验证控件类似(RequiredFieldValidator 除外),如果输入字段为空,则认为 CustomValidator 有效。所以造成CustomValidator没有办法验证空值, 让ControlToValidate 为空,客户端函数每次尝试提交时总会触发一次,这样就可以实现在提交时验证控件为空
以下信息摘自MSDN:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfSystemWebUIWebControlsCustomValidatorClassTopic.asp

注意   如果输入控件为空,则不会调用任何验证函数,并且验证将成功。使用 RequiredFieldValidator 控件要求用户在输入控件中输入数据。

可以在不设置 ControlToValidate 属性的情况下使用 CustomValidator 控件。这种情况通常出现在验证多个输入控件或是验证无法与验证控件一起使用的输入控件(如 CheckBox 控件)时。这种情况下,传递给 ServerValidate 事件的事件处理程序及客户端验证函数的 arguments 参数的 Value 属性将始终包含一个空字符串 ("")。但是,合适时仍将调用这些验证函数,以确定服务器和客户端的有效性。若要访问进行验证的值,您必须通过编程方式引用所要验证的输入控件,然后从相应的属性中检索该值。例如,若要验证服务器上的 CheckBox 控件,请不要设置验证控件的 ControlToValidate 属性,并将下列代码用于 ServerValidate 事件的处理程序。


用途:
您可能会说既然不为空,干嘛不用RequiredFieldValidator,当然是有原因的,比如我有个复选框,我想实现只有选择这个复选框的时候才要求某个文本框不为空,这样我就可以用下面的代码了:
<%@ Page Language="C#" AutoEventWireup="True" %>

<html>
<head>
</head>
<body>

   <form runat="server" id="Form1" >
   <asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
      <asp:TextBox id="Text1"
           runat="server" />

      <asp:CustomValidator id="CustomValidator1"
           ClientValidationFunction="ClientValidate"
           Display="Static"
           ErrorMessage="不能为空!"
           ForeColor="green"
           Font-Name="verdana"
           Font-Size="10pt"
           runat="server"/>
 <br/>
      <asp:Button id="Button1"
           Text="Validate"
           runat="server"/>
   </form>
 
</body>
</html>

<script language="javascript">
<!--
function ClientValidate(sender, args)
{
 if(Form1.CheckBox1.checked&&Form1.Text1.value.length<=0)
 {
  args.IsValid = false;
 }else{
  args.IsValid = true;
 }
}
// -->
</script>




相关文章

相关软件