私は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 ステートメントが機能しません。
どうして?関数が実際にチェックボックスを検証し、無効な場合はフォームが送信されないように、これを変更するにはどうすればよいですか?