如何在复选框上使用必填字段验证器CHECKED为true或false

时间:2017-06-08 14:15:17

标签: asp.net

我有一个用户设置表单,其中有一个下拉列表可以更改某种用户设置,另一方面我有一个复选框也可以在同一页面上更改密码。选中复选框时

<asp:CheckBox ID="cbPassword" runat="server" CssClass="checkbox" onclick="showhidepasswordFields()" />

<div class="col-xs-9 form-inline" id="PChange" style="display: none;">
   <asp:TextBox ID="tbxOldPass" runat="server" TextMode="Password" CssClass="form-control" Width="122px"></asp:TextBox>
   <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="Enter Old Password"  ForeColor="Red" ControlToValidate="tbxOldPass" ValidationGroup="grp"></asp:RequiredFieldValidator>
   <asp:TextBox ID="tbxNewPass" runat="server" TextMode="Password" Width="122px" CssClass="form-control"></asp:TextBox>
   <asp:RequiredFieldValidator ID="tbxNewPassRFV" runat="server" ControlToValidate="tbxNewPass" ErrorMessage="Enter New Passwod" ForeColor="Red" ValidationGroup="grp"></asp:RequiredFieldValidator>
   <asp:TextBox ID="tbxConfirmPass" runat="server" TextMode="Password" Width="122px" CssClass="form-control" ></asp:TextBox>
   <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Display="Dynamic" ControlToValidate="tbxConfirmPass" ErrorMessage="Reconfirm Password" ForeColor="Red" ValidationGroup="grp" ></asp:RequiredFieldValidator>
   <asp:CompareValidator ID="CompareValidator1" runat="server" Display="Dynamic" ErrorMessage="Paswords are not Same" ForeColor="Red" ControlToCompare="tbxNewPass" ControlToValidate="tbxConfirmPass" ValidationGroup="grp"></asp:CompareValidator>
</div>

在用户必须输入旧密码和新密码的位置可见。我希望在选中复选框时,所需的字段验证器不能正常工作。

<asp:Button ID="tbnUpdate" runat="server" Text="Update" OnClick="tbnUpdate_Click" CssClass="btn btn-success" CausesValidation="false" ValidationGroup="grp" />

如果我设置了CausesValidation="false",那么验证就没有完成。如果我将其设置为true,那么如果未选中复选框,则验证器触发器。是否有任何方式仅在选中复选框时才进行修复,否则只需从下拉列表中更新设置?

用于显示/隐藏div的Java脚本函数。

<script type="text/javascript">
        function showhidepasswordFields() {
            if (document.getElementById('<%=cbPassword.ClientID%>').checked) {
                document.getElementById('PChange').style.display = 'block';
            }
            else if (!document.getElementById('<%=cbPassword.ClientID%>').checked) {
                document.getElementById('PChange').style.display = 'none';
            }
        }
    </script>

2 个答案:

答案 0 :(得分:0)

的.aspx:

<asp:CheckBox ID="cbTest" runat="server" OnCheckedChanged="cbTest_CheckedChanged"></asp:CheckBox> 
<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="reqFV" Enabled="false" runat="server" ErrorMessage="*****" ControlToValidate="txtTest" ></asp:RequiredFieldValidator>

.aspx.cs:

protected void cbTest_CheckedChanged(object sender, EventArgs e)
{
    reqFV.Enabled = cbTest.Checked;
}

答案 1 :(得分:0)

您可以使用CustomValidator。第一个函数只是测试CheckBox是否被检查。另一个添加更多逻辑,例如检查TextBox是否也有值。只需更改ClientValidationFunction即可进行测试。

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CheckBox ID="CheckBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="CustomValidator" ClientValidationFunction="testCheckBoxAndTextBox"></asp:CustomValidator>

<script type="text/javascript">
    function testCheckBox(sender, element) {
        element.IsValid = $("#<%= CheckBox1.ClientID %>").prop('checked');
    }

    function testCheckBoxAndTextBox(sender, element) {
        var isValid = false;
        if ($("#<%= CheckBox1.ClientID %>").prop('checked') == true && $("#<%= TextBox1.ClientID %>").val() != "") {
            isValid = true;
        }
        element.IsValid = isValid;
    }
</script>