Link to home
Start Free TrialLog in
Avatar of k3n51mm
k3n51mm

asked on

VB/ASP.Net 2.0: Page.IsValid

I'm making an ASP.Net registration form. It has username, password + confirmation, first name, last name, email, address info...all the things expected from a registration form.

I'm using client-side validators in the ASP form. They seem to be working ok. They're all required field validators, except for a couple regex for email address, phone number and zip code, and a compare validator to make sure the user selects a state from the dropdownlist. This is all pretty standard stuff.

However, when I check Page.IsValid, it always evaluates to False, even if all the form's fields are perfect. So, the data never gets stored.

For clarification, I'm using an <asp:button> to call a 'button_click(source as object, e as EventArgs)' sub, which is where I'm checking Page.IsValid from.


I'm a little rusty on ASP.Net. So what am I doing wrong?
Avatar of ororiole
ororiole
Flag of United States of America image

The validate event does not occur until after Page Load. You are probably checking it in Page Load as is common. You can either wait and check it after the validators have fired, or, and this is how it is often done, raise the validation event yourself:
call Page.Validate() to fire all the validators. Then check Page.IsValid

You can also fire individual validators by raising their event:
validator1.Validate().
if validator1.IsValid...
SOLUTION
Avatar of NazoUK
NazoUK
Flag of United Kingdom of Great Britain and Northern Ireland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of k3n51mm
k3n51mm

ASKER

ororiole:

I'm checking Page.IsValid in a Sub I call as the result of the OnClick event of the button. Here's its declaration in the body of the page:

<asp:button onClick="reg_click" id="reg1" text="Register" runat="server"/>



Sub RegClick(src as Source, e as EventArgs) includes this:

Page.Validate()
If Page.IsValid........

So, I'm not checking it in Page_Load. Looking at other stuff I did back in 2003, that IS where I'm doing it, using  "If Page.IsPostback". Returning to ASP after a few years, I saw no reason to involve Page.IsPostback in the process, so I'm explicitly calling Page.Validate in the button click event.

_______________________________________________________________

NazoUK:

Not to my knowledge. I'm just collecting the text values from the boxes, storing them in SQL parameters, and calling the stored proc on the server to ExecuteNonQuery. This part of the process works fine. If I fill in all the fields, remove Page.IsValid from the process, and click 'Register', it all goes in smoothly. But, If I use Page.IsValid as summarized above, it always evaluates to False, even if the fields all appear to be correct.

If all fields are correctly filled in, then no, either before or after clicking the Register button, none of the validators are showing an error.

It seems to me the validators themselves are working okay - it's just that Page.IsValid refuses to return True for some reason.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of k3n51mm

ASKER

I can't set a breakpoint because I'm not using Visual Studio for this, just typing in a bit of code (so I thought).

But, I did as you asked: removed all validators, and added a response.Write of Page.IsValid....and it's true now.
What would my next step be?

Thanks
Ok, so somewhere at least one of your validators is in fact setting false.
NazoUK had a pretty good idea of checking to see if you modified your form anywhere. To do that I suppose you would have to response.write them all out after page_load, or wherever you are calling your stored proc. But it would be easier to try first I think to response.write out all of the validators IsValid property:
validator1.IsValid.ToString(), etc

Are they all clientside validators, or do you have a custom validator in there somewhere? If so, thats the most likely to set false, so thats another to check. I know you said they were pretty routine stuff, but its an idea.
Im at work and heading home know, but I will check in later tonight.

If you still dont see any fields that would fail
Avatar of k3n51mm

ASKER

Thanks for your help in thinking it through, I found the issue.

I just started adding the Validators back to the code one at a time until one failed.

I had a telephone number validator that required a certain pattern of numerals.... so I just
deleted the validator. As mentioned, this is a lightweight little task, so there's no mission-critical
validation going on.

I added the rest and they're all behaving, so all is well.

Thanks again, both of you.