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

时间:2014-09-08 19:09:30

标签: c# asp.net validation

我使用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>

我的CS代码背后的代码是:

 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();
                }

            }


        }
    }

如果我遗漏任何必要的信息,我会道歉。如果需要,我会添加。

0 个答案:

没有答案