2010-02-12 3 views
1

J'ai un formulaire simple avec des zones de texte. Ces zones de texte ont toutes un RequiredFieldValidator. Si le champ 1 est rempli, je dois désactiver le champ RequiredFieldValidator du champ 2 car un seul de ces champs est requis. Quelle est la meilleure façon d'y parvenir?Validez 1 des 2 champs avec les validateurs asp.net

Répondre

1

Actuellement, je l'ai résolu avec javascript et je peux utiliser validateurs normale.

<script language="javascript" type="text/javascript"> 
function CheckPhoneValidator(txtEmail) 
{ 
    var phoneValidator = document.getElementById('<%= ReqPhone.ClientID %>'); 
    ValidatorEnable(phoneValidator, txtEmail.value == '' ? true : false); 
} 

function CheckEmailValidator(txtPhone) 
{ 
    var emailValidator = document.getElementById('<%= ReqEmail.ClientID %>'); 
    var emailRegexValidator = document.getElementById('<%= RegexEmail.ClientID %>'); 
    ValidatorEnable(emailValidator, txtPhone.value == '' ? true : false); 
    ValidatorEnable(emailRegexValidator, txtPhone.value == '' ? true : false); 
} 

Et ce sont les contrôles:

<tr> 
    <td> 
     E-mail adres: 
    </td> 
    <td> 
     <asp:TextBox ID="TxtEmail" runat="server" onchange="javascript:CheckPhoneValidator(this);"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="ReqEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="U moet een e-mail invullen als u geen telefoonnummer heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator> 
     <asp:RegularExpressionValidator ID="RegexEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="Dit is geen geldig e-mail adres." Display="Dynamic" ValidationExpression="([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})" ValidationGroup="Contact">&nbsp;</asp:RegularExpressionValidator> 
    </td> 
</tr> 
<tr> 
    <td> 
     Telefoonnummer: 
    </td> 
    <td> 
     <asp:TextBox ID="TxtPhone" runat="server" onchange="javascript:CheckEmailValidator(this);"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="ReqPhone" runat="server" ControlToValidate="TxtPhone" ErrorMessage="U moet een telefoonnummer invullen als u geen e-mail heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator> 
    </td> 
</tr> 
1

Dans cette situation, il est plus simple d'utiliser CustomValidator avec un gestionnaire de validation côté serveur. Vous devez ajouter le validateur personnalisé aux deux commandes:

<asp:TextBox runat="server" id="control1" /> 
<asp:CustomValidator runat="server" id="cusCustom1" controltovalidate="control1" onservervalidate="cusCustom_ServerValidate" errormessage="your message" /> 
<asp:TextBox runat="server" id="control2" /> 
<asp:CustomValidator runat="server" id="cusCustom2" controltovalidate="control2" onservervalidate="cusCustom_ServerValidate" errormessage="your message" /> 

et mettre en œuvre le gestionnaire comme

protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e) 
{ 
    e.IsValid = (!string.IsNullOrempty(control1.Text)) || (!string.IsNullOrempty(control2.Text)) 
} 
+0

Pourquoi se contenter de la manipulation de validation côté serveur? Pourquoi pas le côté client et serveur? – rrrr

+0

Bien sûr. La balise CustomValidator peut avoir un attribut supplémentaire ClientValidationFunction = "customJSValidatingFunction". – PanJanek

Questions connexes