C# asp.net-首次提交时不会触发服务器验证

C# asp.net-首次提交时不会触发服务器验证,c#,asp.net,validation,C#,Asp.net,Validation,我的自定义验证器使用OnServerValidation时出现问题。它不会在我第一次提交时触发,但会在提交后正确触发 换句话说,即使我没有正确填写文本字段中的数据并在第一次提交时提交,验证程序也不会发现错误并仍然接受字段中包含的数据,但当我返回表单时,它会在第二次提交时发现不一致 我有3个验证器来验证这个字段。其他两个验证器工作正常,只有OnServer验证有故障 我要编辑的示例ASP代码是: <asp:TemplateField HeaderText="End Date" SortExp

我的自定义验证器使用OnServerValidation时出现问题。它不会在我第一次提交时触发,但会在提交后正确触发

换句话说,即使我没有正确填写文本字段中的数据并在第一次提交时提交,验证程序也不会发现错误并仍然接受字段中包含的数据,但当我返回表单时,它会在第二次提交时发现不一致

我有3个验证器来验证这个字段。其他两个验证器工作正常,只有OnServer验证有故障

我要编辑的示例ASP代码是:

<asp:TemplateField HeaderText="End Date" SortExpression="end_date">
<EditItemTemplate>
    <asp:TextBox ID="txtEndDate" runat="server" Text='<%# Bind("End_Date", "{0:MM/dd/yyyy}") %>'></asp:TextBox>
    &nbsp;<asp:Image ID="imgEndDt" runat="server" ImageUrl="images/calendar.png" ImageAlign="Middle" />          
    &nbsp;<asp:Label ID="hvEndDate" runat="server" Text="?" ToolTip="blah"  BackColor="#507CD1" ForeColor="White" Font-Bold="True"  Height="15" Font-Underline="True"></asp:Label>
    <asp:RegularExpressionValidator ID="revEndDate" runat="server"ErrorMessage="RegularExpressionValidator" ControlToValidate="txtEndDate" Text="(mm/dd/yyyy), ex:  06/03/2011."  ValidationExpression="([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d"></asp:RegularExpressionValidator>
    <cc1:CalendarExtender ID="ceTestDt5" runat="server" TargetControlID="txtEndDate" PopupButtonID="imgEndDt"></cc1:CalendarExtender><br />
    <asp:CustomValidator ID="cvEndDate" runat="server" ErrorMessage="blah" ControlToValidate="txtEndDate" ValidateEmptyText="True" ClientValidationFunction="currentDt"></asp:CustomValidator>
    <br /><asp:CustomValidator ID="cvExitDateCred" runat="server" ErrorMessage="blah" OnServerValidate="exitDateCheck_server" ControlToValidate="txtEndDate"></asp:CustomValidator>                                                  
</EditItemTemplate>

如果我遗漏了任何必要的信息,我深表歉意,如果需要,我将添加。

您可以尝试将ValidateEmptyText=true添加到CustomValidator控件,因为如果您的文本框txtEndDate为空,它将不会触发@Scotty-它是否为空并不重要,问题是我输入的数据不正确,在我第一次提交时被接受,然后在下次提交相同数据时被拒绝。
 protected void exitDateCheck_server(object obj, ServerValidateEventArgs args)
    {
        args.IsValid = true;
        Boolean hasCredEndDate = false;
        String personExit = String.Empty;
        if (dvPerson.FindControl("txtEndDate") != null)
        {
            personExit = (dvPerson.FindControl("txtEndDate") as TextBox).Text.Trim();
            if (personExit != String.Empty)
            {
                try
                {
                    SqlDataReader rdr = null;
                    SqlConnection con = new SqlConnection(constr);
                    SqlCommand cmd = new SqlCommand("blah", con);
                    cmd.Parameters.Add("blah", SqlDbType.VarChar).Value = txtPPersonId.Text;
                    con.Open();
                    rdr = cmd.ExecuteReader();
                    if (rdr.Read())
                    {
                        if (Int32.Parse(rdr["cnt"].ToString()) > 0)
                        {
                            hasCredEndDate = true;
                        }
                    }
                    cmd.Dispose();
                    con.Close();

                    if (hasCredEndDate == true)
                    {
                        args.IsValid = false;
                        SqlDataReader rdr2 = null;
                        SqlConnection con2 = new SqlConnection(constr);
                        SqlCommand cmd2 = new SqlCommand("blah, con2);
                        cmd2.Parameters.Add("blah", SqlDbType.VarChar).Value = txtPPersonId.Text;
                        cmd2.Parameters.Add("blah", SqlDbType.VarChar).Value = (dvPerson.FindControl("txtEndDate") as TextBox).Text;
                        con2.Open();
                        rdr2 = cmd2.ExecuteReader();
                        if (rdr2.Read())
                        {
                            if (Int32.Parse(rdr2["cnt"].ToString()) > 0)
                            {
                                args.IsValid = true;
                            }
                        }
                        cmd2.Dispose();
                        con2.Close();
                    }

                }

                catch (Exception e)
                {
                    lblMessage.Text = e.ToString();
                }

            }


        }
    }