Precisa de uma maneira melhor de validar as caixas de seleção do ASP.NET usando um plugin de validação jquery?
Problema:
Eu quero validar algumas caixas de seleção ASP.NET usando o plugin de validação jquery (encontrado em:http://bassistance.de/jquery-plugins/jquery-plugin-validation/)
O que é tudo isso:
Não é possível definir o atributo name das caixas de seleção do ASP.NET (ou é?). Ele será automaticamente configurado, quando o controle for renderizado e puder ser recuperado usando
<%= emailCheckBox.UniqueID %>
Então, duas caixas de seleção como as seguintes:
<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br />
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br />
irá renderizar para:
<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox">
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox">
Talvez seja uma confusão misturar ASP.NET com o plugin de validação jquery, mas eu prefiro o plugin de validação jquery e funciona bem com entradas e outros campos.
O problema é que o plugin de validação jquery deseja agrupar as caixas de seleção usando o atributo name das caixas de seleção. Esses atributos de nome devem ser iguais a todas as caixas de seleção e um grupo.
O que eu fiz:
Eu adicionei uma regra para todas as caixas de seleção usando jquery:
$("#[id*='AcceptCheckBox']").each(function() { $(this).rules("add", { minchecked: 1 }); });
E adicionei minha própria regra para verificar as caixas de seleção:
jQuery.validator.addMethod("minchecked",
function(value, element, param) {
var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length;
return noOfChecked >= param;
},
"Error");
(Esta regra será aplicada a caixas de seleção cujos IDs incluam AcceptCheckBox, mas está tudo bem neste exemplo).
Quando eu chamo:
var result = $("#aspnetForm").validate().form();
Ele retorna perfeitamente se a minha validação foi bem sucedida ou falhou!
MAS:
1) Eu não sinto que esta é uma solução muito limpa e agradável. Algum melhor conselho?
2) Quando eu executo validate (). Form (), ele passa por TODAS as minhas caixas de seleção e para cada uma delas, marque todas as outras caixas de seleção. Isso não é realmente necessário. Como posso evitar isso?