Crea un CustomValidator que cuente múltiples Checkboxes

En ocasiones puedes tener muchos CheckBoxes desplegados de tal manera que no te permite crear un CheckBoxList (por ejemplo, en tablas), y requieres validar que el visitante no ha marcado más de n número de casillas.

Para hacerlo necesitas colocar todos tus CheckBoxes dentro de un control Panel para poder iterarlos e ir contando. Puedes implementar la validación con un CustomValidator.

La página ASP.NET debe tener lo siguiente:

ASP:
  1. <asp:Panel ID="MiPanel" runat="server">
  2.     <asp:CheckBox ID="Op1" runat="server" />
  3.     <asp:CheckBox ID="Op2" runat="server" />
  4.     <asp:CheckBox ID="Op3" runat="server" />
  5.     <asp:CheckBox ID="Op4" runat="server" />
  6. </asp:Panel>
  7. <asp:CustomValidator ID="CustomValidator1"
  8.                                   runat="server" CssClass="validador" Display="Static"
  9.                                   ErrorMessage="Por favor seleccione un máximo de 2 opciones."
  10.                                   ForeColor="" OnServerValidate="ValidaCheckboxes"></asp:CustomValidator>

Ahí están tus cuatro opciones y tu validador, nota que la función a la que manda llamar el validador se llama ValidaCheckboxes, la cual debe aparecer en tu código de servidor:

VB.NET:
  1. Sub ValidaCheckboxes(ByVal sender As Object, ByVal args As ServerValidateEventArgs)
  2.  
  3.     Dim Ctrl As Control
  4.     Dim Chk As CheckBox
  5.     Dim CuentaCtrl As Int16 = 0
  6.     For Each Ctrl In MiPanel.Controls
  7.         If TypeOf (Ctrl) Is CheckBox Then
  8.             Chk = CType(Ctrl, CheckBox)
  9.             If Chk.Checked = True Then
  10.                 CuentaCtrl = CuentaCtrl + 1
  11.             End If
  12.         End If
  13.     Next
  14.  
  15.     If CuentaCtrl > 2 Then
  16.         args.IsValid = False
  17.     Else
  18.         args.IsValid = True
  19.     End If
  20.  
  21. End Sub

Listo, es todo lo que necesitas. Suerte!

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.