2010-10-12 25 views
6

Tengo tres cuadros de texto en un formulario web asp.net, ¿cómo/puedo usar un validador de campo requerido para asegurar que al menos uno de ellos contenga texto?asp.net validador de campo requerido para al menos un cuadro de texto contiene texto

+0

posible duplicado de [asp.net validate textbox - al menos un cuadro de texto debe tener datos en] (http://stackoverflow.com/questions/1443545/asp-net-validate-textbox-at-least-one- text-box-must-have-data-in) –

Respuesta

15

me gustaría utilizar un CustomFieldValidator así:

<asp:CustomValidator runat="server" 
     ID="MyCustomValidator" 
     ValidationGroup="YOUR_VALIDATION_GROUP_NAME" 
     OnServerValidate="MyCustomValidator_ServerValidate" 
     ErrorMessage="At least one textbox needs to be filled in." /> 

y luego en su código subyacente tiene:

protected void MyCustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    if (/* one of three textboxes has text*/) 
     args.IsValid = true; 
    else 
     args.IsValid = false; 
} 

También puede agregar un componente de cliente para esta validación, y hacerlo sexy extendiéndolo con el control ValidatorCalloutExtender de AJAX toolkit.

+0

No me gustó que esto causara una devolución de datos, así que terminé configurando ClientIDMode = "static" y codificando los valores en una función JS. No estaba realmente interesado en hacer ningún mensaje de error ni nada; Solo quería que el botón no hiciera nada. Gracias por el código. Funcionó totalmente, solo usar un Custom Validator fue la elección incorrecta. Que es mi culpa, no tuya – Shawn

+0

Encontré que esto no activaría la validación con un ValidationGroup especificado. Una vez que lo saqué, funcionó a las mil maravillas. – techturtle

13

No creo que RequiredFieldValidator cumpla con sus requisitos. Me gustaría ir con un CustomValidator asignado a cualquiera de sus campos y verificarlos manualmente cuando se dispara.

<script> 
    function doCustomValidate(source, args) { 

     args.IsValid = false; 

     if (document.getElementById('<% =TextBox1.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox2.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
     if (document.getElementById('<% =TextBox3.ClientID %>').value.length > 0) { 
      args.IsValid = true; 
     } 
    } 
</script> 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="CustomValidator1" runat="server" 
     ErrorMessage="have to fill at least 1 field" 
     ControlToValidate="TextBox1" 
     ClientValidationFunction="doCustomValidate" 
     ValidateEmptyText="true" ></asp:CustomValidator><br /> 
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /> 

No se olvide de establecer ValidateEmptyText="true" como el valor predeterminado es saltarse los campos vacíos. asegúrese de crear un método de validación del lado del servidor similar también.

Cuestiones relacionadas