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
1
A
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"> </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"> </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"> </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))
}
Pourquoi se contenter de la manipulation de validation côté serveur? Pourquoi pas le côté client et serveur? – rrrr
Bien sûr. La balise CustomValidator peut avoir un attribut supplémentaire ClientValidationFunction = "customJSValidatingFunction". – PanJanek