2010-11-29 28 views
3

Bonjour, Je travaille sur un validateur de champ de formulaire personnalisé, il semble que le validateur personnalisé fonctionne en ne lui permettant pas de passer à la page suivante, mais il ne met pas à jour le Résumé de validation et n'affiche pas l'astérisque et les étiquettes que j'ai rendues visibles. J'ai aussi d'autres validateurs comme RequiredFieldValidator sur le même champ. My ValidationGroup est défini, de même que Text et IsValid. J'ai même écrit et mis en place une méthode de validation côté client factices en javascript comme le suggère certaines solutions de contournement.La validation du validateur personnalisé ne met pas à jour le ValidationSummary

est ici le code sommaire de validation asp.net

<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" /> 

Voici le validateur personnalisé et le champ nécessaire un

<asp:CustomValidator ID="AddressVerification" runat="server" ErrorMessage="Please enter a valid address." Display="Dynamic" ValidationGroup="Step2" OnServerValidate="AddressVerification_ServerValidate" ClientValidationFunction="CustomValidatorDummy" Text="*" Enabled="true" EnableClientScript="true"></asp:CustomValidator> 
<asp:RequiredFieldValidator ID="RFValidatorHomeAddress" runat="server" ErrorMessage="Please enter home address." Text="*" Display="Dynamic" ValidationGroup="Step2" ControlToValidate="txtHomeAddress"></asp:RequiredFieldValidator> 

est la méthode de validation personnalisée ici dans le code derrière

protected void AddressVerification_ServerValidate(object sender, ServerValidateEventArgs e) 
{ 
//lets just say it doesn't validate and sets the IsValid to false 
lblUspsValidatorResHomeCity.Visible = true; 
lblUspsValidatorResHomeState.Visible = true; 
lblUspsValidatorResHomeZip.Visible = true; 
e.IsValid = false; 
} 

s'il vous plaît aviser, merci.

EDIT: Répondu - comme indiqué par bitxwise. le résumé de validation doit également être placé dans un panneau de mise à jour. Merci!

Comme si:

<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional" 
runat="server"> 
<ContentTemplate> 
    <asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup" 
     CssClass="errors" /> 
</ContentTemplate> 

puis appeler la mise à jour:

UpdatePanelValidationSummaryHome.Update(); 
+0

Vous avez probablement besoin de ValidationSummary dans votre tag de bouton. (ce code que vous n'avez pas posté). – genericuser

+0

et CausesValidation est vrai par défaut pour le bouton. – genericuser

+0

Je crois que j'ai répondu à votre question (s) donc je vous serais reconnaissant si vous souhaitez mettre à jour votre question pour refléter correctement l'implication d'un UpdatePanel et peut-être créditer ma réponse ... – bitxwise

Répondre

6

Vous semblez manquer ControlToValidate dans votre déclaration de CustomValidator.

EDIT

Si votre CustomValidator regroupe plusieurs commandes, essayez ceci:

ASPX

<asp:TextBox ID="txtMyTextBox" runat="server" /> 
<asp:CustomValidator ID="AddressVerification" runat="server" 
    Display="Dynamic" 
    ErrorMessage="Please enter a valid address." 
    OnServerValidate="AddressVerification_ServerValidate" 
    Text="*" 
    ValidationGroup="Step2" /> 
<asp:RequiredFieldValidator ID="rfvAddress" runat="server" 
    ControlToValidate="txtMyTextBox" 
    Display="Dynamic" 
    ErrorMessage="Please enter an address" 
    Text="*" 
    ValidationGroup="Step2" /> 
... 
<asp:ValidationSummary ID="ValidatorSummary" runat="server" 
    ValidationGroup="Step2" /> 
... 
<asp:Button ID="btnCheckAddresses" runat="server" 
    CausesValidation="true" 
    Text="Check Addresses" 
    ValidationGroup="Step2" /> 

CS

protected void AddressVerification_ServerValidate(object source, ServerValidateEventArgs args) { 
    args.IsValid = !string.IsNullOrEmpty(txtMyTextBox.Text) && !txtMyTextBox.Text.Contains(' '); 
} 

Notez que le groupe de validation de la commande invoquer le post retour a CausesValidation="true" et a le même ValidationGroup que les validateurs.

EDIT 2

Si votre contrôle de postback était dans le UpdatePanel mais le ValidationSummary était pas, ne serait pas rafraîchi la postback partielle du ValidationSummary. Une fois que vous avez supprimé le contrôle de publication à partir du UpdatePanel, j'imagine qu'il générerait alors une publication complète, ce qui actualiserait votre ValidationSummary. Je ne sais pas ce qu'il y a d'autre dans votre UpdatePanel, mais many people report having issues with their validators being in UpdatePanel's.

Découvrez MSDN,

Lorsque vous utilisez la commande ValidationSummary l'intérieur d'un contrôle UpdatePanel, assurez-vous que le contrôle du validateur et le contrôle est associé à sont dans le même panneau. Pour plus d'informations sur l'utilisation du contrôle UpdatePanel pour les mises à jour de page partielle , voir Présentation du rendu de page partiel .

ainsi que ce MSDN blog.

+1

J'ai lu que ControlToValidate n'est pas requis pour un CustomValidator. En outre, mon CustomValidator agrège les données de plusieurs contrôles TextBox. Notez également que ce code fonctionne sur une page différente qui est vraiment déconner avec ma tête en ce moment. ha, peut-être que j'ai raté quelque chose. – David

+0

C'est correct. Je ne savais pas que vous aviez plus d'un contrôle à valider dans votre CustomValidator et avez mis à jour ma réponse pour refléter cela. J'ai testé le code dans mon post et ça marche pour moi. – bitxwise

+0

Je l'ai fait aussi. La validation fonctionne, je peux y entrer. C'est juste qu'il ne met pas à jour le ValidationSummary. Il valide tout, ne fournit pas un bon UX s'il ne met pas à jour le résumé de ce qui ne va pas. L'autre validateur met à jour le résumé de validation. Je peux définir un panneau de mise à jour comme une solution, mais il ne devrait pas y avoir de raison pour que le résumé ou les étiquettes ne soient pas mis à jour. ... peut-être que cela a quelque chose à voir avec la publication? Cela me rend fou parce que je sais que le code fonctionne, je sais que votre code fonctionne. errrr – David

0

Assurez-vous que chaque contrôle (zone de texte, case à cocher, etc.) en cours de validation, chaque RequiredValidator, CustomValidator et ValidationSummary a la même valeur ValidationGroup.

ie. Bien sûr, cela ne fonctionnera que si tous les contrôles sont dans le même panneau ou dans le même contrôle parent.