简体   繁体   中英

CustomValidator firing but not not preventing postback in ASP.NET

I am using a CustomValidator in ASP.NET as follows.

<asp:CustomValidator ID="AnswerCV" runat="server" ForeColor="Red" 
     ValidateEmptyText="True" ValidationGroup="test" 
     OnServerValidate="CustomValidation" ControlToValidate="TextBox1" Enabled="True" 
     ErrorMessage="You must fill in the text box.">
</asp:CustomValidator>

<asp:TextBox ID="TextBox1" ValidationGroup="test" runat="server">
</asp:TextBox>

<asp:Button runat="server" Id="Button" CausesValidation="True" ValidationGroup="test" 
     OnClick="Button_Click" />

In the code behind I have

protected void CustomValidation(object sender, ServerValidateEventArgs e)
{
        MessageBox.Show("It is firing!!!");
        if (string.IsNullOrEmpty(TextBox1.Text))
        {
            e.IsValid = false;
        }
        else
        {
            e.IsValid = true;
        }           
}

And the button click method is as follows

protected void Button_Click(object sender, EventArgs e)
{
        MessageBox.Show("I should not have fired.");
}

The CustomValidation method fires but the Button_Click method fires after that and then the "You must fill in the text box." error message displays. How do I prevent the Button_Click method from firing, when the text box is empty the validation is failing and triggering the error message, but after the Button_click method has fired?

The stackoverflow page here offered other solutions which I have implemented but still the Button_Click method fires.

Aside: And the client side solutions I can not use as I am dynamically going to add code in the Init() method that enables and disables the CustomValidator via a CheckedChanged event in only certain Radio Buttons. End Of Aside

I have also tried the CustomValidator without the OnServerValidate method and I have tried returning a boolean of false from the CustomValidation method cause a syntax error.

Please add one if condition in Button_Click Event

protected void Button_Click(object sender, EventArgs e)
{
    if (IsValid)
    {
        Response.Write("<script> alert ('I should not have fired'); 
            </script>");
    }
}
protected void Button_Click(object sender, EventArgs e) 
{ 
    if (IsValid) 
    { 
      Response.Write(" alert ('I should not have fired'); "); 
    } 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM