Question

J'ai un problème avec un assistant de collecte de données.

Mon assistant possède un certain nombre de validateurs côté client (regex, champ obligatoire, etc.) et ils fonctionnent tous correctement.

Je viens d'ajouter un CustomValidator à l'un des contrôles, qui appelle un code côté serveur. (malheureusement, cela doit être côté serveur).

Mon problème est que ce code semble être appelé une fois que l'assistant est passé à l'étape suivante (ou qu'il est en train de le déplacer).

Ainsi, le fait qu'il retourne false pour la validation m'est peu utile ...

J'ajoute le validateur de manière dynamique dans le cadre de ma méthode 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 ne peux pas comprendre pourquoi l'assistant se déplace avant le retour de la validation de mon serveur.

J'ai ajouté une fenêtre contextuelle javaScript, appelée depuis la méthode côté serveur, qui indique en gros "Je ne suis pas valide". & amp; ceci apparaît juste après le passage de l'écran.

Toutes les suggestions reçues avec reconnaissance.

Était-ce utile?

La solution

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

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

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 validateur côté serveur est maintenant appelé deux fois, une par le code de l'assistant d'origine, qui est ensuite ignoré, et une deuxième fois par cette méthode, qui empêche ensuite l'assistant de passer à l'étape suivante ....

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

Autres conseils

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

Modifier

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top