¿Necesita una mejor forma de validar las casillas de ASP.NET usando un complemento de validación jquery?

votos
3

Problema:

Quiero validar algunas casillas de verificación de ASP.NET utilizando el complemento de validación jquery (que se encuentra en: http://bassistance.de/jquery-plugins/jquery-plugin-validation/ )

De qué se trata

No es posible establecer el atributo de nombre de las casillas de ASP.NET (¿o no?). Se establecerá automáticamente, cuando se represente el control y se pueda recuperar usando

<%= emailCheckBox.UniqueID %>

Entonces dos casillas de verificación como las siguientes:

<asp:CheckBox runat=server ID=emailAcceptCheckBox />Email<br />
<asp:CheckBox runat=server ID=phoneAcceptCheckBox />Phone<br />

rendirá a:

<INPUT id=ctl00_MainContentPlaceHolder_emailAcceptCheckBox type=checkbox name=ctl00$MainContentPlaceHolder$emailAcceptCheckBox>
<INPUT id=ctl00_MainContentPlaceHolder_phoneAcceptCheckBox type=checkbox name=ctl00$MainContentPlaceHolder$phoneAcceptCheckBox>

Quizás es un desastre mezclar ASP.NET con el complemento de validación de jquery, pero prefiero el complemento de validación de jquery y funciona bien con las entradas y otros campos.

El problema es que el complemento de validación de jquery desea agrupar las casillas de verificación usando el nombre-atributo de las casillas de verificación. Los atributos de este nombre deben ser iguales a todas las casillas de verificación y un grupo.

Qué he hecho:

Agregué una regla a TODAS las casillas usando jquery:

$(#[id*='AcceptCheckBox']).each(function() { $(this).rules(add, { minchecked: 1 }); });

Y agregué mi propia regla para buscar casillas de verificación:

jQuery.validator.addMethod(minchecked,
 function(value, element, param) {
     var noOfChecked = $(#[id*='AcceptCheckBox']:checked).length;
          return noOfChecked >= param;
     },
 Error);

(Esta regla se aplicará a las casillas de verificación cuyos ID incluyen AcceptCheckBox, pero está bien en este ejemplo).

Cuando llamo:

var result = $(#aspnetForm).validate().form();

¡Vuelve perfectamente si mi validación tuvo éxito o falló!

PERO:

1) No creo que esta sea una solución muy limpia y agradable. ¿Algún consejo mejor?

2) Cuando ejecuto validate (). Form () pasará TODAS mis casillas de verificación y para cada una de ellas verificará todas las demás casillas de verificación. Eso realmente no es necesario. ¿Cómo puedo evitar esto?

Publicado el 16/07/2009 a las 10:44
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

En general, tu código me parece bien. Creo que ha manejado limpiamente la limitación asp: checkbox (no puede especificar el atributo 'nombre' para asp: checkbox).

Personalmente, usaría la casilla HTML regular.

<input type="checkbox" runat="server" ID="emailAcceptCheckBox" name="acceptCheckBox" value="emailAccepted" /><label for="emailAcceptCheckBox">Email</label><br />
<input type="checkbox" runat="server" ID="phoneAcceptCheckBox" name="acceptCheckBox" value="phoneAccepted" /><label for="phoneAcceptCheckBox">Email</label><br />

(He añadido una etiqueta para que el usuario pueda hacer clic en la etiqueta (objetivo más grande) para marcar / desmarcar la casilla).

Arriba simplificará su código jQuery.

En su código del lado del servidor, marque Request.Form ["acceptCheckBox"] para ver qué está marcado y qué no.

Respondida el 16/07/2009 a las 17:49
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more