Here's an interesting thing I came across.
Create a form, put some text boxes with required field validators on it. Have a list bound by ObjectDataSource.
Now drop a couple buttons on it, one button to add an item to the list. The other button to go to the next form and should have causesvalidation = false.
Because we want to make sure they add at least one thing to the list before they go to the next form, set the visible=false property on the next button. Set it to true in the ObjectDataSource Selected event if the items returned has count > 0.
Go to the next form. Then use a hyperlink or button to return to the previous form, restoring the state with session or querystring. The next button will be visible since the list has items.
Click the next button, the page will post back, but the validators will fire even though causesvalidation is false. If you then click the button a second time it will ignore validation like it should and move to the next form.
If you take the visible=false off the properties in the .aspx page it works fine. It also works fine if you just set visible in the codebehind. It only bugs out when Visible=False is set in the .aspx page.
Wierd.