2009-10-06 5 views
3

J'ai une zone de texte dans une page ASPX qui a un événement TextChanged attaché. J'ai aussi un validateur attaché à la zone de texte.Arrêt de la publication sur TextChanged

Lorsque le texte est modifié, la validation se déclenche mais en cas d'erreur, l'événement textchanged est toujours appelé. Savez-vous s'il est possible d'arrêter la publication sur textchanged si le validateur se déclenche?

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged"></asp:TextBox> 
<asp:RequiredFieldValidator ID="reqQuantity" ControlToValidate="txtQuantity" runat="server" ErrorMessage="The quantity is mandatory."></asp:RequiredFieldValidator> 

Répondre

3

Vous pouvez déplacer validation côté client ajoutant EnableClientScript="true" attribut. La publication ne se produira pas car la vérification sera effectuée avec JS. A part cela, vous pouvez vérifier si la page est valide lors de l'exécution de la fonction de rappel pour l'événement TextChanged afin de définir si la fonction peut continuer. Vous devez ajouter l'attribut ValidationGroup à votre validateur et appeler la fonction Page.Validate en spécifiant ce groupe avant que Page.IsValid soit cochée.

Upd

est ici la pointe.

Ajoutez votre propre fonction JS, par exemple:

function IsValid(args) { 
     if(args.value.length == 0) { 
      return false; 
     } 
     else { 
      return true; 
     } 
    } 

En Page_Load cas ajouter ce code:

txtQuantity.Attributes[ "onchange" ] = "if (IsValid(this) == false) return;"; 

Ce ne sera pas gâcher postback automatique lorsque l'entrée est correcte, mais empêchera postback autrement.

+3

La propriété EnableClientScript n'évite pas le postback ... – Dante

+0

réponse Mise à jour avec une solution simple, ... – terR0Q

+0

Vous avez raison, et j'ai essayé cela. La chose est que j'ai un RangeValidator qui a besoin de valeurs Min et Max, et j'ai des problèmes pour envoyer ces deux valeurs dans la fonction IsValid. Mais votre idée fonctionne. Pour cette raison, je vais accepter votre réponse même si le problème n'est pas résolu. – Dante

0

essayer après le changement AutoPostBack = "true" comme AutoPostBack = "false" ..

+0

Et comment est mon événement TextChanged en postback? : s – Dante

+1

Pourquoi voulez-vous effectuer une publication sur un événement textchanged? Y a-t-il une logique métier associée? –

0

Il suffit de partager une ligne, version plus courte de la réponse acceptée:

<asp:TextBox ID="txtQuantity" runat="server" 
    AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" 
    onchange="if (this.value.length == 0) return;"></asp:TextBox> 

le même problème avec un RequiredFieldValidator, ce qui précède a fonctionné pour moi.

Connu nag: le concepteur se plaint que "onchange" n'est pas un attribut côté serveur valide.

3

Ajoutez CausesValidation="true" pour la zone de texte et ce sera bon. Si la validation n'est pas valide, il n'y aura pas de post-retour.

<asp:TextBox ID="txtQuantity" runat="server" AutoPostBack="true" ontextchanged="txtQuantity_TextChanged" CausesValidation="true"></asp:TextBox> 

+0

Oui, mais cela évite la publication et je veux avoir AutoPostback = "true" afin qu'il puisse valider les données dans la zone de texte pour l'autre logique dans le programme. – Fandango68

Questions connexes