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