2010-06-23 6 views
12

J'ai un code dans lequel j'ai besoin de deux valideurs de champs obligatoires distincts pour un contrôle, tous deux dans des groupes de validation séparés qui sont ensuite validés par deux boutons séparés.Comment désactiver le comportement de "focus perdu" du validateur de champs ASP.NET

Cette approche fonctionne bien lorsque les boutons sont cliqués, mais les deux valideurs indiquent si je saisis une valeur dans la zone de texte, puis la supprime. Y a-t-il un moyen de désactiver cette validation de "perte de focus"? J'en ai seulement besoin pour valider quand on clique sur les boutons.

EDIT

Malheureusement, si je mets EnableClientScript = false alors je n'ai pas des notifications client. Ce que je veux, c'est que le message d'erreur dynamique s'affiche (de manière efficace dans l'événement OnClientClick du bouton) mais pas le "focus perdu" de la zone de texte.

Y at-il un moyen de désactiver ou de "décrocher" l'événement client lostfocus?

EDIT

Combinaison de réponse et la answeer de womp here de dDejan triés parfaitement le problème.

Mon code final ressemble à ceci (pour quelqu'un d'autre avec une situation similaire) ...

Javascript ...

<script type="text/javascript"> 

    $(document).ready(function() { 
     $('body').fadeIn(500); 

     //Turn off all validation = its switched on dynamically 
     $.each(Page_Validators, function(index, validator) { 
       ValidatorEnable(validator, false); 
     }); 
    }); 

    function ToggleValidators(GroupName) { 

     $.each(Page_Validators, function(index, validator) { 
      if (validator.validationGroup == GroupName) { 

       ValidatorEnable(validator, true); 

      } else { 
       ValidatorEnable(validator, false); 
      } 
     }); 
    } 

</script> 

ASPX Exemple de contrôle ...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox> 
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator> 

Code de bouton ASPX ...

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/> 

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" /> 

Donc, maintenant il n'y a aucune validation jusqu'à ce qu'un utilisateur clique sur le bouton "Get Email Confirmation Code" ou le bouton "Register". Si elles cliquent sur le bouton "Get Email Confirmation Code", toutes les commandes sont validées en dehors de la zone de texte où l'utilisateur doit saisir le code de validation de l'e-mail et nous ne voyons qu'un seul message de validation.

Si elles cliquent sur le bouton "Enregistrer", alors tous les contrôles sont validés et nous voyons seulement un message de validation.

Si l'un des boutons est enfoncé, l'utilisateur revient en arrière, ajoute, puis supprime du texte, puis nous ne voyons qu'un seul validateur. Avant ce changement, vous voyiez les deux messages dire la même chose.

Nous vous remercions d'aider les gars

+0

Je sais que cela peut être vieux, mais une fois que le validateur a été activé onSubmit, comment transformez-vous-le à nouveau sur le focus, de sorte que le message d'erreur disparaît jusqu'à ce que le bouton de soumission soit cliqué à nouveau? – SollyM

Répondre

5

Vous pouvez définir si les validateurs sont "actifs" ou non avec le code côté client à l'aide de la fonction ValidatorEnable. Fondamentalement, il va comme ceci

var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); //where state is boolean 

Vous pouvez également déclencher le validateur pour valider sur un événement (comme par exemple le clic des boutons) en utilisant la fonction ValidatorValidate(validator).

Je ne suis pas sûr qui fonctionnerait mieux pour vous (activer/désactiver les validateurs ou personnalisés déclenchement de la validation), mais je suggère cet article qui vous guidera dans la bonne direction

ASP.NET Validation in Depth

+0

Je sais que cela est peut-être ancien, mais une fois que le Validateur a été activé sur Soumettre, comment le réactiver pour que le message d'erreur disparaisse jusqu'à ce que le bouton Soumettre soit de nouveau cliqué? – SollyM

0

Vous pouvez désactiver la validation javascript en réglant EnableClientScript = « false » qui se débarrasser de la validation de mise au point perdu.

2

Il n'y a aucun moyen de les décrocher si EnableClientScript = true.

Ce que vous pouvez faire est de le définir sur false. Créez ensuite une méthode de validation javascript appelée sur votre événement submitClientClick.

Dans votre méthode, vous devez appeler ValidatorValidate (contrôle) pour chaque commande que vous voulez valider côté client

Il y a un exemple:

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

0

Vous pouvez utiliser des contrôles personnalisés Validator à la place et validez l'entrée en utilisant Javascript sur le client ou dans le gestionnaire d'événements sur le serveur. Assurez-vous de définir ValidateEmptyText = "true" sur les contrôles de validation sinon les événements ne se déclencheront pas sur un champ vide.

0

Try Activer sur les deux bouton cliquez sur en utilisant javascript et désactivez-le sur l'événement flou de la zone de texte.

0
var validator = document.getElementById('<%=Validator1.ClientID%>'); 
ValidatorEnable(validator , state); 

Il travaille en javascript, mais lorsque nous utilisons la fonction Page.IsValid côté serveur, il crée le problème de vérifier la page est valide ou non.

0

Essayez de réinitialiser l'événement onchange pour le contrôle d'entrée.

$(document).ready(function() { 
     $("#controlid").each(function() { this.onchange = null; }) 
    }); 
0

il suffit de taper ce code dans page_load événement

textboxname.Attributes.Add("onblur","ValidatorOnChange(event);"); 
Questions connexes