Asp.net 如何在选中true或false的复选框上使用必需的字段验证器

Asp.net 如何在选中true或false的复选框上使用必需的字段验证器,asp.net,Asp.net,我有一个用户设置表单,上面有一个下拉列表来更改某种用户设置,另一方面,我有一个复选框来更改同一页面上的密码。当复选框处于选中状态时 <asp:CheckBox ID="cbPassword" runat="server" CssClass="checkbox" onclick="showhidepasswordFields()" /> <div class="col-xs-9 form-inline" id="PChange" style="display: none;"&g

我有一个用户设置表单,上面有一个下拉列表来更改某种用户设置,另一方面,我有一个复选框来更改同一页面上的密码。当复选框处于选中状态时

<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>
.aspx:

您可以使用CustomValidator进行验证。第一个函数只是测试复选框是否被选中。另一个增加了更多的逻辑,比如检查文本框是否也有值。只需更改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>

请出示所有相关代码。我在您共享的代码中没有看到任何复选框。不过,我希望您需要为类似的内容编写自定义验证器。我已经添加了代码。
<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>
<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>
protected void cbTest_CheckedChanged(object sender, EventArgs e)
{
    reqFV.Enabled = cbTest.Checked;
}
<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>