Publicado por: blogdoneilor em: junho 16, 2009
A validação de CheckBoxList utilizando CustomValidator, no cliente, evita postback ou chamada ajax que dependa do servidor. Isto não elimina a necessidade de validação no code-behind, pois o navegador do usuário pode estar com o javascript desativado, o que “invalidaria” esta validação.
Neste exemplo, o id do meu CheckBoxlist é “txt_menus”. Pois bem, para começar, criamos um campo oculto para guardar a quantidade de items que o CheckBoxList contém:
<asp:HiddenField ID="num_itens" runat="server" />
No code-behind (.vb), quando a lista de items for definida, seja manualmente ou através de uma query, insira o código:
num_itens.Value = txt_menus.Items.Count - 1
Perceba que foi subtraído 1 item do total pois o primeiro item da lista será o “0″ (zero).
De volta ao código da página (.aspx), próximo ao CheckBoxList, inserimos o bloco do CustomValidator:
<asp:CustomValidator ID="ValidaMenus" runat="server" ClientValidationFunction="ValidaMenus">Selecione alguma opção!</asp:CustomValidator>
E a função JavaScript que fará a validação:
function ValidaMenus(source, args)
{
var PrefixoCampos = 'ctl00_ContentPlaceHolder1_'
var MaxItens = document.getElementById(PrefixoCampos + 'num_itens').value;
var Selecionados = 0;
for(i=0; i <= MaxItens; i++)
{
ItemAtual = document.getElementById(PrefixoCampos + 'txt_menus_' + i);
if (ItemAtual.checked == true)
{
Selecionados = Selecionados +1;
}
}
if(Selecionados == 0)
{
return args.IsValid = false;
}
)
Bom, é isso! Depois você personaliza como quiser. No caso de validação de múltiplos controles, recomento o uso do ValidationSummary, sem exibição de “alert”, fica mais elegante e personalizável com css. No meu caso, costumo fazer assim:
<asp:ValidationSummary ID="ValidationSummary1" runat="server" HeaderText="Para continuar, corrija as seguintes pendências:" CssClass="MsgValidacao" ForeColor="" />
Abraço!