ASP.NET Custom Validator côté client et validation côté serveur non déclenchée

Cela ne m’est pas arrivé auparavant, mais pour une raison quelconque, les événements de validation côté client et côté serveur ne sont pas déclenchés:

   

Evénement de validation côté serveur:

 protected void TextBoxDTownCity_Validate(object source, ServerValidateEventArgs args) { args.IsValid = false; } 

Evénement de validation côté client:

 function TextBoxDCountyClient(sender, args) { args.IsValid = false; alert("test"); } 

Je pensais au moins que la validation côté serveur se déclencherait mais non. cela ne m’est jamais arrivé auparavant. Cela m’a vraiment déconcerté.

J’ai regardé la sortie et ASP.NET reconnaît la fonction côté client:

Sortie JavaScript ASP.NET:

 var ctl00_ctl00_content_content_CustomValidator2 = document.all ? document.all["ctl00_ctl00_content_content_CustomValidator2"] : document.getElementById("ctl00_ctl00_content_content_CustomValidator2"); ctl00_ctl00_content_content_CustomValidator2.controltovalidate = "ctl00_ctl00_content_content_TextBoxDTownCity"; ctl00_ctl00_content_content_CustomValidator2.errormessage = "Delivery Town or City required"; ctl00_ctl00_content_content_CustomValidator2.display = "Dynamic"; ctl00_ctl00_content_content_CustomValidator2.evaluationfunction = "CustomValidatorEvaluateIsValid"; ctl00_ctl00_content_content_CustomValidator2.clientvalidationfunction = "TextBoxDTownCityClient"; 

Validateur personnalisé rendu:

 Delivery Town or City required 

Quelqu’un peut-il expliquer pourquoi la validation côté client et côté serveur ne se déclenche pas.

Edit: Typo J’ai collé dans la mauvaise fonction, problème toujours le même

Juste une autre mise à jour du dernier commentaire: où la zone de texte ne peut pas être vide. Je l’ai testé et ce n’est pas vrai. Sur une page vierge, CustomValidator a déclenché la fonction de validation côté client sans valeur:

    

Votre CustomValidator ne se déclenche que lorsque TextBox n’est pas vide.

Si vous devez vous assurer qu’il n’est pas vide, vous aurez également besoin d’un RequiredFieldValidator .

Remarque: Si le contrôle d’entrée est vide, aucune fonction de validation n’est appelée et la validation réussit. Utilisez un contrôle RequiredFieldValidator pour exiger que l’utilisateur entre des données dans le contrôle d’entrée.

MODIFIER:

Si votre CustomValidator spécifie l’atsortingbut ControlToValidate (et que votre exemple d’origine le fait), vos fonctions de validation seront uniquement appelées lorsque le contrôle n’est pas vide.

Si vous ne spécifiez pas ControlToValidate vos fonctions de validation seront appelées à chaque fois.

Cela ouvre une deuxième solution possible au problème. Plutôt que d’utiliser un RequiredFieldValidator distinct, vous pouvez omettre l’atsortingbut ControlToValidate de CustomValidator et configurer vos fonctions de validation pour faire quelque chose comme ceci:

Code côté client (Javascript):

 function TextBoxDCountyClient(sender, args) { var v = document.getElementById('<%=TextBoxDTownCity.ClientID%>').value; if (v == '') { args.IsValid = false; // field is empty } else { // do your other validation tests here... } } 

Code côté serveur (C #):

 protected void TextBoxDTownCity_Validate( object source, ServerValidateEventArgs args) { ssortingng v = TextBoxDTownCity.Text; if (v == ssortingng.Empty) { args.IsValid = false; // field is empty } else { // do your other validation tests here... } } 

Utilisez ceci:

  

Valider un champ vide.

Vous n’avez pas besoin d’append 2 validateurs!

La validation côté client n’était pas du tout exécutée sur mon formulaire Web et je n’avais aucune idée de la raison. Il s’avère que le problème était que le nom de la fonction javascript était le même que l’ID de contrôle du serveur.

Donc tu ne peux pas faire ça …

   

Mais cela fonctionne:

   

Je suppose que cela entre en conflit avec le Javascript interne .NET?

Avez-vous vérifié que le contrôle à l’origine de la publication a CausesValidation défini sur tru et qu’aucun groupe de validation ne lui a été atsortingbué?

Je ne sais pas quoi d’autre pourrait causer ce comportement.

Vérifiez également que vous n’utilisez pas de groupes de validation car cette validation ne se déclenche pas si la propriété validationgroup a été définie et n’est pas explicitement appelée via

  Page.Validate({Insert validation group name here}); 

La validation côté serveur ne se déclenche pas si la validation côté client n’est pas valide, la publication n’est pas envoyée.

Vous n’avez pas d’autre validation qui ne passe pas?

La validation côté client n’est pas exécutée car vous avez spécifié ClientValidationFunction="TextBoxDTownCityClient" et cela recherchera une fonction nommée TextBoxDTownCityClient comme fonction de validation, mais le nom de la fonction doit être TextBoxDAddress1Client

(comme vous avez écrit)

Merci pour cette info sur le ControlToValidate LukeH!

Ce que j’essayais de faire dans mon code était seulement de m’assurer que du champ de texte A contenait du texte dans le champ lorsque le champ de texte B avait une valeur particulière. Sinon, A peut être vide ou autre chose. Se débarrasser de ControlToValidate = “A” dans mon balisage a résolu le problème pour moi.

À votre santé!