我有一个用户设置表单,其中有一个下拉列表可以更改某种用户设置,另一方面我有一个复选框也可以在同一页面上更改密码。选中复选框时
<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>
答案 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>