Lions Den

The Code and Times of Hanan Schwartzberg

About Hanan | Hanan's CV | Contact Hanan

April 1, 2009

Validate Multiple ValidationGroups on One Page

Filed under: ASP.NET,Client Side — Tags: , , , — Hanan Schwartzberg @ 3:37 pm

Scenario

A page has multiple validation groups:

  • vgPrimary
  • vgMain

The submit button on the page is a member of vgMain, so automatically it will only run the validation on that group. A solution is needed that will run validation on multiple groups and block the postback if needed.

Solution

Include the following function on the page:

function RunValidation()
{
   //validate the primary group
   var validated = Page_ClientValidate('vgPrimary ');
 
   //if it is valid
   if (validated)
   {
      //valid the main group
      validated = Page_ClientValidate('vgMain');
   }
 
   //remove the flag to block the submit if it was raised
   Page_BlockSubmit = false;
 
   //return the results
   return validated;
}

Call the above function from the submit button’s OnClientClick event.

<asp:Button runat="server" ID="btnSubmit" CausesValidation="true" 
   ValidationGroup="vgMain" Text="Next" OnClick="btnSubmit_Click"
   OnClientClick="return RunValidation();"  />

What is Page_BlockSubmit

When the user clicks on a button causing a full post back, after running Page_ClientValidate ASP.NET runs another built in function ValidatorCommonOnSubmit. Within Page_ClientValidate, Page_BlockSubmit is set based on the validation. The postback is then blocked in ValidatorCommonOnSubmit if Page_BlockSubmit is true. No matter what, at the end of the function Page_BlockSubmit is always reset back to false.

If a page does a partial postback without running any validation and Page_BlockSubmit has not been reset to false, the partial postback will be blocked. In essence the above function, RunValidation, acts similar to ValidatorCommonOnSubmit. It runs the validation and then returns false to block the postback if needed. Since the built in postback is never run, we need to reset Page_BlockSubmit manually before returning the validation result.

6 Comments »

  1. Thanks for the article buddy. It wz helpful.

    Sougandh Pavithran

    Comment by Sougandh — April 30, 2010 @ 11:32 pm

  2. Only correct one thing. The function name is incorrect in the OnClientClick.

    Comment by Sougandh — April 30, 2010 @ 11:37 pm

  3. Thanx for the note. It’s fixed.

    Comment by Hanan Schwartzberg — May 1, 2010 @ 8:26 pm

  4. I cannot begin to explain how much this posting helped me. I was having issues with controls in updatepanels not firing their autopostback events after calling Page_ClientValidate and Page_BlockSubmit = false corrected the issue.

    It all makes sense now, but I spent hours trying to figure this out.

    Thank you so much for posting this!

    Comment by KPhillipson — May 5, 2010 @ 4:54 am

  5. Page_BlockSubmit = false;

    saved my day!

    Comment by Wh1tet1p — May 12, 2010 @ 2:23 am

  6. Was busting myself all morning attempting to validate using asp validators before executing the OnClientClick event, this saved the afternoon I would have spent reworking everything. Cheers!

    Comment by bb — July 21, 2010 @ 5:03 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

Anti-Spam by WP-SpamShield

Home | Site Design | Banner Design | Code Den | Offsite Posts | Downloads | Photography | About Hanan | Hanan's CV | Contact Hanan
Copyright © 2009 Hanan Schwartzberg. All rights reserved.