Web Form validation with 2 forms on a single page

  • Thread starter Thread starter iMedia User
  • Start date Start date
I

iMedia User

I have a site where I want to use the Web form validators in two separate
forms on a single page. One form allows existing users to log in while the
second one allows new users to register. The problem is that if I use the
Web Form validation tags, it treats them all as one form (ie...if someone is
trying to use the login form, they get an error saying that they have to
enter values in the registration form and vice-versa).

Any ideas on how to handle this?
 
19765604

Hi,

On the client, you need to use a function named ValidatorEnable to turn
specific validators on or off. On the server, you need to override the
Validate event and add code to enable/disable specific validators.

Notice that I'm careful to replicate the enable/disable state of each
validator in the server Validate event to be the same state as it was on
the client. Errors here could cause bugs that are hard to track down.

The following sample uses two text boxes for users to login & two for new
users to sign up. All four have required field validators. (with this
simple example, it would have been more elegant to use just one set of two
text boxes. However, I expect that your login & sign-up sections are
different from each other).

This whole sample has almost no error handling since it's just a sample.
The "broken" mode merely turns on all validators on the server & blocks
almost any activity,


**** CODE-BEHIND

Public Overrides Sub Validate()
RequiredFieldValidator1.Enabled = (Mode.Value = "Broken" Or Mode.Value
= "Login")
RequiredFieldValidator2.Enabled = (Mode.Value = "Broken" Or Mode.Value
= "Login")
RequiredFieldValidator3.Enabled = (Mode.Value = "Broken" Or Mode.Value
= "NewUser")
RequiredFieldValidator4.Enabled = (Mode.Value = "Broken" Or Mode.Value
= "NewUser")
MyBase.Validate()
End Sub



**** ASPX PAGE

<HTML>
<HEAD>
<title>ValidatedLogin1</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"
name="vs_targetSchema">
<script>

function ToLogin() {
Form1.Mode.value = "Broken"
Form1.Button1.value = "Login";
Form1.Button2.value = "New visitors click here";
Form1.TextBox1.disabled="";
Form1.TextBox2.disabled="";
Form1.TextBox3.disabled="disabled";
Form1.TextBox4.disabled="disabled";
Form1.TextBox1.style.visibility = "";
Form1.TextBox2.style.visibility = "";
Form1.TextBox3.style.visibility = "hidden";
Form1.TextBox4.style.visibility = "hidden";
ValidatorEnable(RequiredFieldValidator1, true);
ValidatorEnable(RequiredFieldValidator2, true);
ValidatorEnable(RequiredFieldValidator3, false);
ValidatorEnable(RequiredFieldValidator4, false);
Form1.TextBox3.value="";
Form1.TextBox4.value="";
Form1.Mode.value = "Login"
}

function ToNewUser() {
Form1.Mode.value = "Broken"
Form1.Button1.value = "Click here if you already have an account";
Form1.Button2.value = "Register new name and password";
Form1.TextBox1.disabled="disabled";
Form1.TextBox2.disabled="disabled";
Form1.TextBox3.disabled="";
Form1.TextBox4.disabled="";
Form1.TextBox1.style.visibility = "hidden";
Form1.TextBox2.style.visibility = "hidden";
Form1.TextBox3.style.visibility = "";
Form1.TextBox4.style.visibility = "";
ValidatorEnable(RequiredFieldValidator1, false);
ValidatorEnable(RequiredFieldValidator2, false);
ValidatorEnable(RequiredFieldValidator3, true);
ValidatorEnable(RequiredFieldValidator4, true);
Form1.TextBox1.value="";
Form1.TextBox2.value="";
Form1.Mode.value = "NewUser"
}

function LoginClick() {
if (Form1.Mode.value = "Broken")
ToLogin();
if (Form1.Mode.value = "NewUser")
ToLogin();
if (Form1.Mode.value = "Login")
{
if (typeof(Page_ClientValidate) == 'function')
{
Page_ClientValidate();
if (Page_IsValid)
Form1.submit();
}
else
{
Form1.submit()
}
}
}

function NewUserClick() {
if (Form1.Mode.value = "Broken")
ToNewUser();
if (Form1.Mode.value = "Login")
ToNewUser();
if (Form1.Mode.value = "NewUser")
{
if (typeof(Page_ClientValidate) == 'function')
{
Page_ClientValidate();
if (Page_IsValid)
Form1.submit();
}
else
{
Form1.submit()
}
}
}
</script>
</HEAD>
<body onload="ToLogin();">
<form id="Form1" method="post" runat="server">
<P><INPUT id="Mode" type="hidden" name="Mode" runat="server">
<br>
<asp:textbox id="TextBox1"
runat="server"></asp:textbox><asp:requiredfieldvalidator
id="RequiredFieldValidator1" runat="server"
ErrorMessage="RequiredFieldValidator"
ControlToValidate="TextBox1"></asp:requiredfieldvalidator><BR>
<asp:textbox id="TextBox2"
runat="server"></asp:textbox><asp:requiredfieldvalidator
id="RequiredFieldValidator2" runat="server"
ErrorMessage="RequiredFieldValidator"
ControlToValidate="TextBox2"></asp:requiredfieldvalidator><BR>
<INPUT id="Button1" type="button" value="Button" name="Button1"
onclick="LoginClick();"><BR>
<hr>
<BR>
<INPUT id="Button2" type="button" value="Button" name="Button2"
onclick="NewUserClick();"><BR>
<asp:textbox id="TextBox3"
runat="server"></asp:textbox><asp:requiredfieldvalidator
id="RequiredFieldValidator3" runat="server"
ErrorMessage="RequiredFieldValidator"
ControlToValidate="TextBox3"></asp:requiredfieldvalidator><BR>
<asp:textbox id="TextBox4"
runat="server"></asp:textbox><asp:requiredfieldvalidator
id="RequiredFieldValidator4" runat="server"
ErrorMessage="RequiredFieldValidator"
ControlToValidate="TextBox4"></asp:requiredfieldvalidator>
<P></P>
<P></P>
</form>
</body>
</HTML>




Thank you, Mike
Microsoft, ASP.NET Support Professional

Microsoft highly recommends to all of our customers that they visit the
http://www.microsoft.com/protect site and perform the three straightforward
steps listed to improve your computer's security.

This posting is provided "AS IS", with no warranties, and confers no rights.

--------------------
 
Back
Top