2010-01-25 18 views
17

¿Cuál es la mejor manera de hacer un cuadro de texto requerido si se marca una casilla de verificación?ASP.NET - Hacer un cuadro de texto obligatorio SI se marca una casilla de verificación

Me imagino que podría escribir un validador personalizado, pero esperaba evitar una publicación completa para verificar la validación, si es posible ... Estaba pensando que AJAX tenía algo incorporado para este escenario, pero no he podido para encontrarlo. Estoy pensando que Javascript también sería una solución, pero podría usar una ventaja si ese es el mejor enfoque.

Gracias por cualquier información.

Respuesta

20

El JavaScript para manejar esto no es muy difícil.

Dada la siguiente ASP controles:

<asp:TextBox ID="txtSubject" runat="server" /> 
<asp:CheckBox ID="chkSubjectRequired" runat="server" OnClick="updateValidator();" /> 
<asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" ErrorMessage="You must enter a subject." runat="server" /> 

Añadir la función JavaScript siguiente:

<script language="javascript" type="text/javascript"> 
    function updateValidator() { 
     var enableValidator = !event.srcElement.status; 
     var rfvSubject = document.getElementById('rfvSubject'); 
     ValidatorEnable(rfvSubject, enableValidator); 
    } 
</script> 

Eso es todo lo que hay que hacer. También tendrá que añadir el siguiente código a su evento carga de la página, de modo que si el usuario tiene JavaScript desactivado, el validador de campo requerida está siendo activado o desactivado correctamente:

rfvSubject.Enabled = chkSubjectRequired.Checked 
+0

gracias impresionantes mucho ... aunque mirando el código ASP, no serían necesarios que txtSubject incluso cuando la casilla de verificación no fue verificado? ¿Quiso desactivar el validador ... y luego tener el javascript habilitado? – Albert

+0

Todo el código provisto no ha sido probado, bla, bla, bla. Sí, parece que lo entendí al revés. He modificado mi respuesta. –

+0

genial solo quería comprobar. gracias otra vez – Albert

2

Puede hacer un validador personalizado y luego ajustar esos dos controles en un UpdatePanel. Eso lo convertiría en una llamada AJAX para ti. Es un desperdicio, pero te ahorra tener que escribir el JavaScript tú mismo.

Además, si odias escribir JS tanto como yo, deberías probar jQuery.

-2

Deberá verificarlo en la rutina de validación que esté utilizando actualmente, tanto del lado del cliente como del servidor.

1

Ya existe un control de validador devalidador personalizado, que puede activar un método de JavaScript del lado del cliente para evaluar el valor, o un método del lado del servidor para comparar los valores.

Esto tiene un ejemplo: http://msdn.microsoft.com/en-us/library/a0z2h4sw%28VS.80%29.aspx propiedad cliente explica aquí: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx caso servidor aquí: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.servervalidate.aspx

Usted puede poner el código en una referencia cruzada el valor casilla.

HTH.

1

para resolver este todo dentro de ASP. Net, que la casilla de verificación hacer una devolución de datos:

<asp:CheckBox 
    ID="Existing" 
    runat="server" 
    Text="Conditional ValidatorVal" 
    AutoPostBack="True" 
    OnCheckedChanged="Existing_CheckedChanged" 
/> 

Luego, en el código subyacente, activar o desactivar los validadores:

protected void Existing_CheckedChanged(object sender, EventArgs e) 
{ 
    RequiredFieldValidator1.Enabled =! Existing.Checked; 
} 
0

debe utilizar CustomValidator y utilizar ClientIDMode = "Static" en la casilla de verificación y en el cuadro de texto.

<asp:TextBox ID="txtSubject" ClientIDMode="Static" runat="server" /> 
<asp:CheckBox ID="chkSubjectRequired" ClientIDMode="Static" runat="server" /> 
<asp:CustomValidator ID="valid1" runat="server" 
      ClientValidationFunction="validateCheckboxCheck" 
      ErrorMessage="You must write anything."> 
</asp:CustomValidator> 

y escribir a continuación etiqueta de script para la función (requiere jQuery)

<script type="text/javascript"> 
function validateCheckboxCheck(source, args) { 
      if ($("#chkSubjectRequired").is(":checked")) { 
       if ($("#txtSubject").val()==="") { 
        // return false for error message 
        args.IsValid = false; 
       } else { 
        // return true 
        args.IsValid = true; 
       } 
      } else { 
       // return true 
       args.IsValid = true; 
      } 
     } 
</script> 
Cuestiones relacionadas