CheckBoxListのクライアント検証コントローラを実装するメモです。
必須選択用のカスタム検証コントローラ
.aspx
<asp:CheckBoxList ID="chkTeianShubetsu" CssClass ="teianShubetsu" runat="server" visible="true">
<asp:ListItem Value="01" Text="リコール"></asp:ListItem>
<asp:ListItem Value="02" Text="削減"></asp:ListItem>
</asp:CheckBoxList>
<asp:CustomValidator runat="server" ID="reqCheckBoxList" Display="None"></asp:CustomValidator>
.vb
' エラーメッセージ設定
reqCheckBoxList.ErrorMessage = "未選択です"
'クライアント検証用JS、必ずここで設定すること(aspxでClientIDが取得できなかった)
reqCheckBoxList.ClientValidationFunction = String.Format("CustomJs.CreateFunction(CustomJs.Validate.RequiredCheckBoxList,'{0}')", Me.chkTeianShubetsu.ClientID)
.js
var CustomJs;
(function () {
"use strict";
CustomJs = {
CreateFunction: function (callback) {
var self = arguments;
return function (src, args) {
var paras = [];
$.each(arguments, function (index, value) {
paras.push(value);
});
$.each(self, function (index, value) {
if (value !== callback) {
paras.push(value);
}
});
return callback.apply(this, paras);
}
},
Validate: {
/**
* クライアント検証コントローラ
* @param {any} sender イベントを発生したオブジェクト
* @param {any} args 発生したイベントに関する情報である「Sys.EventArgs派生オブジェクト」を表す
* @param {any} targetId 検証対象のClientID
*/
RequiredCheckBoxList: function (sender, args, targetId) {
var ctl = document.getElementById(targetId);
if (ctl) {
var inputs = ctl.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].checked) {
args.IsValid = true;
return;
}
}
}
args.IsValid = false;
}
}
};
})();