如何验证表单,以便如果字段丢失或未正确填写表单将 return false
How to validate a form so if a field is missing or not correctly filled in the form will return false
我的 ASP.net 页面中有以下表格:
<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="upReg" UpdateMode="Conditional">
<ContentTemplate>
<div class="dvHolder hidOverflow clearfix">
<input id="txtFirst" type="text" name="login" value="" placeholder="First Name" runat="server" />
<asp:Label Text="" runat="server" ID="lblRFName" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtLast" type="text" name="login" value="" placeholder="Last Name" runat="server" />
<asp:Label Text="" runat="server" ID="lblRLName" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtEmail" type="text" name="login" value="" placeholder="Email Address" runat="server" />
<asp:Label Text="" runat="server" ID="lblREmail" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtUser" type="text" name="login" value="" placeholder="Username" runat="server" />
<asp:Label Text="" runat="server" ID="lblRUser" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtPass" type="password" name="login" value="" placeholder="Password" runat="server" />
<asp:Label Text="" runat="server" ID="lblRPass" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtPassC" type="password" name="login" value="" placeholder="Confirm Password" runat="server" />
<asp:Label Text="" runat="server" ID="lblRPassC" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix setTextRight">
<asp:Button ID="btnRegister" ClientIDMode="Static" runat="server" Text="Register" OnClick="btnRegister_Click" />
<asp:Label runat="server" Text="" ID="lblSuccess" ClientIDMode="Static" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
代码隐藏:
public void btnRegister_Click(object sender, EventArgs e)
{
if (txtFirst.Value == "")
{
lblRFName.Text = "Please enter your first name";
blnFrmComplete = false;
}
else
{
lblRFName.Text = "";
blnFrmComplete = true;
}
if (txtLast.Value == "")
{
lblRLName.Text = "Please enter your last name";
blnFrmComplete = false;
}
else
{
lblRLName.Text = "";
blnFrmComplete = true;
}
if (txtEmail.Value == "")
{
lblREmail.Text = "Please enter your email address";
blnFrmComplete = false;
}
else
{
if (!(IsValidEmail(txtEmail.Value)))
{
lblREmail.Text = "Please enter a valid email address";
blnFrmComplete = false;
}
else
{
if (UserExistsWithEmail()) //function to check if email account already exists
{
lblREmail.Text = "The email already has an account";
blnFrmComplete = false;
}
else
{
lblREmail.Text = "";
blnFrmComplete = true;
}
}
}
if (txtUser.Value == "")
{
lblRUser.Text = "Please enter a desired username";
blnFrmComplete = false;
}
else
{
if (UserExistsWithUsername()) //function to check if username already exists
{
}
else
{
lblRUser.Text = "";
blnFrmComplete = true;
}
}
if (txtPass.Value == "")
{
lblRPass.Text = "Please enter a password";
blnFrmComplete = false;
}
else
{
if (txtPassC.Value != "" && txtPass.Value == txtPassC.Value)
{
lblRPass.Text = "";
blnFrmComplete = true;
}
else
{
lblRPass.Text = "Password do not match";
blnFrmComplete = false;
}
}
if (txtPassC.Value == "")
{
if (txtPass.Value != "")
{
lblRPassC.Text = "Please confirm your password";
blnFrmComplete = false;
}
else
{
lblRPassC.Text = "Please enter your confirmed password";
blnFrmComplete = false;
}
}
else
{
if (txtPass.Value != "" || txtPass.Value == txtPassC.Value)
{
lblRPassC.Text = "";
blnFrmComplete = true;
}
else
{
lblRPassC.Text = "Confirm password do not match";
blnFrmComplete = false;
}
}
if (blnFrmComplete == true)
{
CreateNewUser();
}
upReg.Update();
}
我遇到的问题是因为它是按顺序进行的,如果我缺少电子邮件地址但密码正确,它将 return 正确。
我该如何修改代码,这样如果任何字段丢失或未正确填写,blnFrmComplete
将为 false,其余代码将不会被检查。
你应该看看:
<asp:RequiredFieldValidator id="RequiredFieldValidator2"
ControlToValidate="TextBox1"
Display="Static"
InitialValue=""
ErrorMessage="*"
runat="server"/>
与其将你的 blnFrmComplete
设置为 true
,不如将其保留为 true
,并让他们仅在某些内容无效时将其更改为 false。什么都不应该将其设置回 true
.
因此,您的布尔值一开始就设置为 true,只有在某些内容无效时才将其切换为 false。如果没有什么是无效的,那么你的布尔值仍然是真的。
您应该使用验证方法而不是按钮单击处理程序。 Return如果您检测到它无效,则立即:
bool IsFormValid()
{
bool valid = !string.IsNullOrWhiteSpace(txtFirst.Value);
if(!valid)
{
lblRFName.Text = "Please enter your first name";
return false;
}
valid = !string.IsNullOrWhiteSpace(txtLast.Value);
if(!valid)
{
lblRLName.Text = "Please enter your last name";
return false;
}
// ...
valid = !string.IsNullOrWhiteSpace(txtEmail.Value);
if (!valid)
{
lblREmail.Text = "Please enter your email address";
return false;
}
// ...
return true;
}
public void btnRegister_Click(object sender, EventArgs e)
{
if (IsFormValid())
{
CreateNewUser();
upReg.Update();
}
}
但如果它是 ASP.NET,您应该使用可用的验证器,例如 RequiredFieldValidator
。
我的 ASP.net 页面中有以下表格:
<asp:UpdatePanel runat="server" ClientIDMode="Static" ID="upReg" UpdateMode="Conditional">
<ContentTemplate>
<div class="dvHolder hidOverflow clearfix">
<input id="txtFirst" type="text" name="login" value="" placeholder="First Name" runat="server" />
<asp:Label Text="" runat="server" ID="lblRFName" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtLast" type="text" name="login" value="" placeholder="Last Name" runat="server" />
<asp:Label Text="" runat="server" ID="lblRLName" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtEmail" type="text" name="login" value="" placeholder="Email Address" runat="server" />
<asp:Label Text="" runat="server" ID="lblREmail" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtUser" type="text" name="login" value="" placeholder="Username" runat="server" />
<asp:Label Text="" runat="server" ID="lblRUser" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtPass" type="password" name="login" value="" placeholder="Password" runat="server" />
<asp:Label Text="" runat="server" ID="lblRPass" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix">
<input id="txtPassC" type="password" name="login" value="" placeholder="Confirm Password" runat="server" />
<asp:Label Text="" runat="server" ID="lblRPassC" CssClass="lblStyle" />
</div>
<div class="dvHolder hidOverflow clearfix setTextRight">
<asp:Button ID="btnRegister" ClientIDMode="Static" runat="server" Text="Register" OnClick="btnRegister_Click" />
<asp:Label runat="server" Text="" ID="lblSuccess" ClientIDMode="Static" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
代码隐藏:
public void btnRegister_Click(object sender, EventArgs e)
{
if (txtFirst.Value == "")
{
lblRFName.Text = "Please enter your first name";
blnFrmComplete = false;
}
else
{
lblRFName.Text = "";
blnFrmComplete = true;
}
if (txtLast.Value == "")
{
lblRLName.Text = "Please enter your last name";
blnFrmComplete = false;
}
else
{
lblRLName.Text = "";
blnFrmComplete = true;
}
if (txtEmail.Value == "")
{
lblREmail.Text = "Please enter your email address";
blnFrmComplete = false;
}
else
{
if (!(IsValidEmail(txtEmail.Value)))
{
lblREmail.Text = "Please enter a valid email address";
blnFrmComplete = false;
}
else
{
if (UserExistsWithEmail()) //function to check if email account already exists
{
lblREmail.Text = "The email already has an account";
blnFrmComplete = false;
}
else
{
lblREmail.Text = "";
blnFrmComplete = true;
}
}
}
if (txtUser.Value == "")
{
lblRUser.Text = "Please enter a desired username";
blnFrmComplete = false;
}
else
{
if (UserExistsWithUsername()) //function to check if username already exists
{
}
else
{
lblRUser.Text = "";
blnFrmComplete = true;
}
}
if (txtPass.Value == "")
{
lblRPass.Text = "Please enter a password";
blnFrmComplete = false;
}
else
{
if (txtPassC.Value != "" && txtPass.Value == txtPassC.Value)
{
lblRPass.Text = "";
blnFrmComplete = true;
}
else
{
lblRPass.Text = "Password do not match";
blnFrmComplete = false;
}
}
if (txtPassC.Value == "")
{
if (txtPass.Value != "")
{
lblRPassC.Text = "Please confirm your password";
blnFrmComplete = false;
}
else
{
lblRPassC.Text = "Please enter your confirmed password";
blnFrmComplete = false;
}
}
else
{
if (txtPass.Value != "" || txtPass.Value == txtPassC.Value)
{
lblRPassC.Text = "";
blnFrmComplete = true;
}
else
{
lblRPassC.Text = "Confirm password do not match";
blnFrmComplete = false;
}
}
if (blnFrmComplete == true)
{
CreateNewUser();
}
upReg.Update();
}
我遇到的问题是因为它是按顺序进行的,如果我缺少电子邮件地址但密码正确,它将 return 正确。
我该如何修改代码,这样如果任何字段丢失或未正确填写,blnFrmComplete
将为 false,其余代码将不会被检查。
你应该看看:
<asp:RequiredFieldValidator id="RequiredFieldValidator2"
ControlToValidate="TextBox1"
Display="Static"
InitialValue=""
ErrorMessage="*"
runat="server"/>
与其将你的 blnFrmComplete
设置为 true
,不如将其保留为 true
,并让他们仅在某些内容无效时将其更改为 false。什么都不应该将其设置回 true
.
因此,您的布尔值一开始就设置为 true,只有在某些内容无效时才将其切换为 false。如果没有什么是无效的,那么你的布尔值仍然是真的。
您应该使用验证方法而不是按钮单击处理程序。 Return如果您检测到它无效,则立即:
bool IsFormValid()
{
bool valid = !string.IsNullOrWhiteSpace(txtFirst.Value);
if(!valid)
{
lblRFName.Text = "Please enter your first name";
return false;
}
valid = !string.IsNullOrWhiteSpace(txtLast.Value);
if(!valid)
{
lblRLName.Text = "Please enter your last name";
return false;
}
// ...
valid = !string.IsNullOrWhiteSpace(txtEmail.Value);
if (!valid)
{
lblREmail.Text = "Please enter your email address";
return false;
}
// ...
return true;
}
public void btnRegister_Click(object sender, EventArgs e)
{
if (IsFormValid())
{
CreateNewUser();
upReg.Update();
}
}
但如果它是 ASP.NET,您应该使用可用的验证器,例如 RequiredFieldValidator
。