CheckBoxList et Validation : imposer qu'au moins une checkbox soit coché
Suite à mon expliquant comment Verifier qu'une checkbox soit coché grâce à un validator, voici comment vérifier qu'au moins une checkbox d'une CheckBoxList soit coché. Pour cela on utilise un CustomValidator :
Thèmes :
<asp:CheckBoxList runat="server" ID="cblThemes" OnDataBound="cblThemes_DataBound" />
<script type="text/javascript">
var validateTheme = function(source, args){
var cbs = $get('<%=cblThemes.ClientID%>').getElementsByTagName('input');
args.IsValid = false;
for (var i = 0, cb = cbs[ i ]; i < cbs.length; cb = cbs[++i]){
if (cb.type == 'checkbox'){
if(cb.checked){
args.IsValid = true;
break;
}
}
}
}
</script>
<asp:CustomValidator runat="server" Text="*" ErrorMessage="un thème minimum"
ClientValidationFunction="validateTheme" ValidationGroup="Question"
OnServerValidate="cvThemes_ServerValidate" />
Et côté serveur :
protected void cvThemes_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = false;
foreach (ListItem item in cblThemes.Items)
{
if (item.Selected)
{
args.IsValid = true;
break;
}
}
}
Il ne faut bien sur pas oublier de vérifier si la page est valide avant de faire toute action :
protected void btnValidate_Click(Object sender, EventArgs e)
{
Page.Validate("Question");
if (Page.IsValid)
{
// on est sur que la page est valide
}
}