2009-08-04 6 views
1

J'ai un problème avec un assistant de collecte de données.Côté serveur CustomValidator se produisant trop tard dans .Net Assistant

Mon assistant a un certain nombre de validateurs côté client (regex, champ obligatoire, etc.) et tout fonctionne correctement.

Je viens d'ajouter un CustomValidator à l'un des contrôles, c'est-à-dire un code côté serveur. (Malheureusement, il doit être côté serveur).

Mon problème est que ce code semble être appelé après que l'assistant est passé à l'étape suivante (ou est en cours de déplacement).

Ainsi, le fait qu'il renvoie false pour la validation est de peu d'utilité pour moi ...

J'ajoute le validateur dynamique dans le cadre de ma méthode de InitControl comme suit:

mustUploadAnImageValidator = new CustomValidator(); 
mustUploadAnImageValidator.ControlToValidate = radioButtonList.ID; 
mustUploadAnImageValidator.ValidationGroup = "wizardGroup"; 
mustUploadAnImageValidator.ErrorMessage = "You must select a valid gallery image to use"; 
mustUploadAnImageValidator.Display = ValidatorDisplay.Static; 
mustUploadAnImageValidator.ServerValidate += 
    new ServerValidateEventHandler(mustUploadAnImageValidator_ServerValidate); 
mustUploadAnImageValidator.CssClass = "galleryValidationMessageTop"; 

Cela fonctionne pour tous les autres validateurs, mais je n'arrive pas à comprendre pourquoi l'assistant se déplace avant que la validation de mon serveur ne revienne.

J'ai ajouté un pop-up javaScript, appelé à partir de la méthode côté serveur, qui dit essentiellement "Je ne suis pas valide" & cela apparaît juste après le passage de l'écran.

Toute suggestion reçue avec gratitude.

Répondre

2

J'ai réussi à résoudre ce problème.

J'ai ajouté un gestionnaire d'événement pour le NextButtonClick & PreviousButtonClick qui appelle simplement la validation de la page à nouveau.

protected virtual void DataCollectionWizard_PreviousButtonClick(object sender, WizardNavigationEventArgs e) 
    { 
     //manually validate the page, as the automatic validation seems to ignore CustomValidators 
     Page.Validate("wizardGroup"); 

     if (!Page.IsValid) 
     { 
      e.Cancel = true; 
     } 
    } 

Mon côté serveur validateur est maintenant appelé deux fois, une fois par le code de l'assistant d'origine, qui est alors ignorée, et une 2ème fois par cette méthode, qui arrête alors l'assistant de passer à l'étape suivante ..

Ce n'est pas la meilleure solution au monde, mais au moins ça marche! Je mettrai à jour cet article si jamais je découvre ce qui se passe réellement.

+1

"Je mettrai à jour ... si jamais je découvre ce qui se passe réellement." S'il vous plaît faire! – Beska

0

Assurez-vous d'ajouter le contrôle à chaque publication, dans l'événement Init.

Modifier

Vous devez également câbler manuellement la validation du côté client pour les validateurs personnalisés.

+0

Bonjour, le contrôle CustomValidator est ajouté à la collection controls dans la méthode init. Un validateur de champ obligatoire est ajouté en même temps et cela fonctionne correctement. Je pense que ça doit être un côté serveur côté client Vs ... –

+0

Je ne vois pas de configuration de validation de client? – ScottE

+0

Désolé, je ne suis pas clair - il n'y a pas de validation du client configurée pour le contrôle mustUploadAnImageValidator, mais il y a un requiredFieldValidator sur la radioButtonList. Ce validateur fonctionne correctement, contrairement au CustomValidator. D'après ce que je comprends, le requiredFieldValidator produit des scripts côté client pour vous? –

Questions connexes