2

私は2つのチェックボックスを持っています。フォームが送信される前に、それらの少なくとも 1 つがチェックされていることを確認する必要があります。

ページに CustomValidator を配置しています。サーバー側の検証のための関数を呼び出します。クライアント側の検証用の関数を追加する必要があります。

クライアント側の関数は JavaScript で記述する必要があります。

(ここで違いが生じるかどうかはわかりませんが、ページには、他の非カスタム バリデータを使用する textBoxes などの他のユーザー コントロールもあります)。

これは、チェックボックスとカスタム バリデータ コントロールです。

<tr>
    <td colspan="3">
        <asp:CheckBox id="EmailCourse" name="EmailCourse" runat="server" />
         Email course
    </td>
</tr>
<tr>
    <td colspan="3">
        <asp:CheckBox name="SpecialReport" id="SpecialReport" runat="server" />
            Special report
    </td>
</tr>
<tr>
    <td colspan="3">
        <asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox checked" CssClass="error" ClientValidationFunction="validateCheckboxes_ClientValidate" OnServerValidate="validateCheckBoxes_ServerValidate"></asp:CustomValidator>
    </td>
</tr>

そして、これはサーバー側の検証のために呼び出される関数です:

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (!EmailCourse.Checked && !SpecialReport.Checked)
            args.IsValid = false;
        else
            args.IsValid = true;
    }

クライアント側関数 validateCheckboxes_ClientValidate を書いてみました:

    <script type="text/javascript" language="javascript">

        function validateCheckboxes_ClientValidate(oSrc, args) {
            alert("inside function");
            var ec = document.getElementById("EmailCourse");
            var sr = document.getElementById("SpecialReport");
            if (!sr.checked && !ec.checked) {
                alert("hi it works");
                args.IsValid = false;
            }
            else {
                alert("one of them is checked");
                args.IsValid = true;
            }
        }
</script> 

これはうまくいきません。関数が呼び出され、最初のアラートが表示されますが...それだけです! IF ステートメントが機能しません。

どうして?関数が実際にチェックボックスを検証し、無効な場合はフォームが送信されないように、これを変更するにはどうすればよいですか?

4

1 に答える 1

0

私はあなたのコードを試してみましたが、マスターページを使用していないページで問題なく動作しました。

マスターページが以下のように生成された最終的なマークアップの ID を変更した、この場合はMainContent_EmailCourseJS で as idを使用する必要があります。

<td colspan="3">
    <span name="EmailCourse"><input id="MainContent_EmailCourse" type="checkbox" name="ctl00$MainContent$EmailCourse" /></span>
     Email course
</td>

特別レポート

または、ブラウザ固有の問題である可能性があります。

于 2012-06-19T13:46:47.017 に答える