2010-10-12 6 views
6

J'ai trois zones de texte sur un formulaire web asp.net, comment/puis-je utiliser un validateur de champ obligatoire pour s'assurer qu'au moins l'un d'entre eux contient du texte?asp.net champ de validation obligatoire pour au moins une zone de texte contient du texte

+0

duplication possible de [zone de texte de validation asp.net - au moins une zone de texte doit contenir des données] (http://stackoverflow.com/questions/1443545/asp-net-validate-textbox-at-least-one- text-box-must-have-data-in) –

Répondre

15

J'utiliser un CustomFieldValidator comme ceci:

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

puis dans votre codebehind vous avez:

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

Vous pouvez également ajouter un composant côté client à cette validation, et de le rendre sexy en l'étendant avec le contrôle ValidatorCalloutExtender de AJAX toolkit.

+0

Je n'aimais pas que cela provoque une publication, donc j'ai juste fini par définir le ClientIDMode = "statique" et coder en dur les valeurs dans une fonction JS. Je n'étais pas vraiment intéressé à faire des messages d'erreur ou quoi que ce soit; Je voulais juste que le bouton ne fasse rien. Merci pour le code. Il a totalement fonctionné, son utilisation juste d'un CustomValidator était le mauvais choix. Ce qui est ma faute, pas le tien. – Shawn

+0

J'ai trouvé que cela ne déclencherait pas la validation avec un ValidationGroup spécifié. Une fois que j'ai sorti ça, ça a marché comme un charme. – techturtle

13

Je ne pense pas que RequiredFieldValidator répond à vos besoins. Je voudrais aller avec un CustomValidator affecté à l'un de vos champs et les vérifier manuellement tous quand il se déclenche.

<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 /> 

Ne pas oublier de mettre ValidateEmptyText="true" comme valeur par défaut est de sauter des champs vides. assurez-vous de créer une méthode de validation similaire côté serveur.

Questions connexes