如何验证表单,以便如果字段丢失或未正确填写表单将 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"/>

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.requiredfieldvalidator(v=vs.110).aspx

与其将你的 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