类别编码:<asp:TextBox runat="server" Id="ID_XB"/>(这是我定义的文本框)
下面是对它的验证:验证类别编码字段不能为空:
<asp:RequiredFieldValidator runat="server" ControlToValidate="ID_XB"   ErrorMessage="类别编码字段不可以为空白!" Display="none" />下面是验证填入的类别编码是否和数据库中的有重复:       
<% For I=0 To myDataList.Items.Count-1
   Dim num As String = myDataList.DataKeys.Item(I) 
%>
<asp:CompareValidator runat="server" ControlToValidate="ID_XB" ValueToCompare="<%=num%>" Type="String" Operator="NotEqual"  ErrorMessage="类别编码不允许重复!" Display="none"/>
<% Next %>下面是用弹出框显示错误信息:        
<asp:ValidationSummary runat="server" DisplayMode="BulletList" ShowMessageBox="True" ShowSummary="false" HeaderText="错误警告:" />
我的问题是:在没有CompareValidator 验证的时候一切正常,可是加入CompareValidator 验证后,就什么也不显示了,弹出框也没有了,如果输入相同的主键(类别编码),就会显示错误信息页,请教各位,这是怎么回事呀!请大家帮忙!

解决方案 »

  1.   

    in cases like this, you shouldn't use comparevalidator, maybe a customvalidator is more properbut if you insist, that is not the way to create multiple comparevalidator's, try something like<form runat="server" id="form1">
    <asp:TextBox runat="server" Id="ID_XB"/>
    <asp:RequiredFieldValidator runat="server" ControlToValidate="ID_XB"   ErrorMessage="类别编码字段不可以为空白!" Display="none" /></form>code behind or in your Page_Load code:protected HtmlForm form1;
    dim cv as CompareValidator
    For I=0 To myDataList.Items.Count-1
     Dim num As String = myDataList.DataKeys.Item(I) 
     cv = new CompareValidator()
     form1.Controls.Add(cv)
     cv.ControlToValidate="ID_XB"
     cv.ValueToCompare = num & ""
     cv.Type = ValidationDataType.String
     cv.Operator = ValidationCompareOperator.NotEqual
     cv.ErrorMessage = "类别编码不允许重复!"
     cv.Display = ValidatorDisplay.None
    next
      

  2.   

    经思归指点后,我用customvalidator实现验证不能输入重复的类别编码:
    Sub Check_Null(sender As Object, e As ServervalidateEventArgs)
    For I=0 To myDataList.Items.Count-1
    Dim num As String = myDataList.DataKeys.Item(I) 
    If e.value = num Then
    e.IsValid = false
    Exit Sub
    End If
             Next 
    End Sub
     
    <asp:CustomValidator runat="server" ControlToValidate="ID_XB" OnServerValidate="Check_Null" ErrorMessage="类别编码不允许重复!" Display="none"/>
    <asp:ValidationSummary runat="server" DisplayMode="BulletList" ShowMessageBox="True" ShowSummary="false" HeaderText="错误警告:" />
    但是ValidationSummary并不能用弹出框来显示错误信息,如果去掉设置 Display="none",则可以显示错误信息,还有一个问题,如果我用RequiredFieldValidator来验证是否输入为空,则可以弹出对话框,这是怎么回事呀!
      

  3.   

    1,我认为你这样用验证控件是错的。因为验证控件是在postback时才触发的,你把所有验证放在一个循环中,根本没有post back的机会。
    2,思归说的没错,但我觉得你在插入数据时到数据库中去验证有没有重复更好。
    用一条SQL即可select count(*) from tal where key=MyKey,记录数0可插入,否则不可。