0

I am using asp requiredfieldvalidator. I want the required field validator to fire only when a checkbox on my form is checked.

When the checkbox is fired, the validator works as expected and error message shows up but when the checkbox is unchecked the errormessage that showed up stays on the screen. I have tried different options like validator.resetForm(); disabling the validator, hiding the validator but the error message stays on the screen form. Here is the simplified version of my code:

<script src="jquery-1.4.2.min.js"></script>
<!DOCTYPE html>
<script type="text/javascript">
    function enableDisableControls(value) {
      var enabledSilentPost = $("#<%=chkEnableSilentPost.ClientID%>").attr("checked");
      var validatorControl = $("#<%=valApprovalURL.ClientID%>")[0];

      ValidatorEnable(validatorControl, enabledSilentPost);

      // If the checkbox is false then assume that the 
      if (!enabledSilentPost) {
        validatorControl.enabled = false;
      }
    }

$(document).ready(function () {
  $("#<%=chkEnableSilentPost.ClientID%>").click(function () {
    enableDisableControls();
  });

  enableDisableControls();
});

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
  <div>
    <asp:CheckBox ID="chkEnableSilentPost" runat="server" Width="250px" Text="Enable" />
    <asp:Label ID="lblApprovalURL" runat="server" Text="URL" CssClass="controllabel" meta:resourcekey="lblApprovalURLResource"></asp:Label>
    <asp:TextBox ID="txtApprovalURL" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="valApprovalURL" runat="server" ControlToValidate="txtApprovalURL" ErrorMessage="Please enter Valid Text" Text="*"></asp:RequiredFieldValidator>
    <actk:ValidatorCalloutExtender ID="extApprovalURL" TargetControlID="valApprovalURL" runat="server" Enabled="True"></actk:ValidatorCalloutExtender>
  </div>
</form>

4

1 回答 1

0

通过执行以下操作,我能够让验证者做出反应。Validator 非常简单,但我必须预测 Extender 的 ID 才能使其工作:

<script type="text/javascript">
        $(function () {
            $('#<%=chkEnableSilentPost.ClientID %>').click(function () {
                $("#<%=valApprovalURL.ClientID %>").toggle(this.checked);
                $("#extApprovalURL_popupTable").toggle(this.checked);
            });
        });

    </script>
    <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" />
        <div>
            <asp:CheckBox ID="chkEnableSilentPost" runat="server" Width="250px" Text="Enable" />
            <asp:Label ID="lblApprovalURL" runat="server" Text="URL" CssClass="controllabel" meta:resourcekey="lblApprovalURLResource"></asp:Label>
            <asp:TextBox ID="txtApprovalURL" runat="server"></asp:TextBox>
            <asp:RequiredFieldValidator ID="valApprovalURL" runat="server" ControlToValidate="txtApprovalURL" ErrorMessage="Please enter Valid Text" Text="*"></asp:RequiredFieldValidator>
            <asp:ValidatorCalloutExtender ID="extApprovalURL" TargetControlID="valApprovalURL" runat="server" Enabled="True"></asp:ValidatorCalloutExtender>
        </div>
    </form>
于 2013-10-08T19:43:08.003 回答