ComfortablyNumb
ComfortablyNumb

Reputation: 1456

Validation Ignored with PostBackUrl or Response.Redirect Using C#

I have a form with some custom validation. There is a button on the form that should take the user to a 'confirm page' to show all the details of an order.

On-Page Validation

    <asp:TextBox ID="txtBillingLastName" Name="txtBillingLastName" 
runat="server"  CssClass="txtbxln required"></asp:TextBox>
    <asp:CustomValidator 
    ID="CustomValidatorBillLN" runat="server" 
    ControlToValidate="txtBillingLastName"
    OnServerValidate="CustomValidatorBillLN_ServerValidate"
    ValidateEmptyText="True">
    </asp:CustomValidator>

Validator code behind

protected void CustomValidatorBillLN_ServerValidate(object sender, ServerValidateEventArgs args)
    {
        args.IsValid = isValid(txtBillingLastName);
    }

However, if I add PostBackUrl or Response.Redirect to the button onclick method, all the validation controls are ignored.

I could call all the validation methods with the onclick method, but that seems a less than an elegant solution.

I've tried setting CausesValidation=False with no luck.

Any suggestions?

Upvotes: 0

Views: 4065

Answers (2)

Emaad Ali
Emaad Ali

Reputation: 1501

Check this code

void ValidateBtn_OnClick(object sender, EventArgs e) 
  { 
     // Display whether the page passed validation.
     if (Page.IsValid) 
     {
        Message.Text = "Page is valid.";
     }

     else 
     {
        Message.Text = "Page is not valid!";
     }
  }

  void ServerValidation(object source, ServerValidateEventArgs args)
  {
     try 
     {
        // Test whether the value entered into the text box is even.
        int i = int.Parse(args.Value);
        args.IsValid = ((i%2) == 0);
     }

     catch(Exception ex)
     {
        args.IsValid = false;
     }
  }

And Html side code

<form id="Form1" runat="server">

  <h3>CustomValidator ServerValidate Example</h3>

  <asp:Label id="Message"  
       Text="Enter an even number:" 
       Font-Name="Verdana" 
       Font-Size="10pt" 
       runat="server"/>

  <p>

  <asp:TextBox id="Text1" 
       runat="server" />

  &nbsp;&nbsp;

  <asp:CustomValidator id="CustomValidator1"
       ControlToValidate="Text1"
       ClientValidationFunction="ClientValidate"
       OnServerValidate="ServerValidation"
       Display="Static"
       ErrorMessage="Not an even number!"
       ForeColor="green"
       Font-Name="verdana" 
       Font-Size="10pt"
       runat="server"/>

  <p>

  <asp:Button id="Button1"
       Text="Validate" 
       OnClick="ValidateBtn_OnClick" 
       runat="server"/>

For further information check Custom validator

Hope my answer help you to solve your problem.

Upvotes: 1

Wiktor Zychla
Wiktor Zychla

Reputation: 48230

Of course that validation IS ignored if you redirect unconditionally. You should call this.IsValid before you redirect like

protected btRedirect_Click( object sender, EventArgs e )
{
   if ( this.IsValid )
     Response.Redirect( ... );
}  

Upvotes: 1

Related Questions