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?
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?
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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.
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
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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
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.ToStrin g(), 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
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.ToStrin
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
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.
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.
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...