3 votes

Validation du modèle dans asp .net MVC

Je développe une application où j'ai un formulaire avec un modèle "StudentListModel".

J'ai un bouton sur la même page qui n'est pas un bouton d'envoi. J'ai écrit une fonction ajax qui appelle une méthode d'action dans le contrôleur spécifié.

Maintenant mon problème est qu'il y a un champ de texte pour le nom de l'élève ,

    [StringLength(160, MinimumLength = 3)]
    [Display(Name = "Prénom")]
    [Required]
    [Remote("VérifierNomsDupliqués", "AjouterÉtudiant")]
    public string StudentName { get; set; } 

Aucune de ces validations ne fonctionne. Cependant, si je fais du bouton un bouton d'envoi, elles fonctionneront.

Y a-t-il un moyen de faire une validation de modèle autre que l'utilisation de l'envoi du formulaire?

3voto

josant Points 1176

La validation du modèle est effectuée automatiquement avant l'exécution de votre ActionMethod et le ModelState sera rempli avec des informations sur cette validation. Vous n'avez pas besoin d'appeler ValidateModel tant que vous exécutez votre Controller et ActionMethods dans le cycle de vie MVC par défaut.

Une méthode d'action qui a des paramètres aura les valeurs des paramètres remplies en utilisant la liaison de modèle MVC. Cela signifie que toutes les valeurs envoyées dans un formulaire ou dans la QueryString (et quelques autres sources) seront associées par nom aux paramètres simples ou aux propriétés des paramètres complexes. En utilisant un formulaire HTML et les méthodes HtmlHelper de MVC pour créer des types de saisie, vous obtenez le comportement souhaité avec très peu de travail, mais comme vous l'avez noté, cela nécessite l'envoi des données par soumission de formulaire.

Un appel ajax remplira également le modèle en utilisant la liaison de modèle, mais il nécessite que les champs soient envoyés à l'ActionMethod. En utilisant jQuery, il suffit d'effectuer une requête post ou get sur l'événement de clic du bouton en passant un objet JavaScript avec les propriétés de votre modèle.

$('#yourButtonId').click(function() {
    var student = {};
    student.StudentName = $('#StudentName').val();
    $.post('@Url.Action("ActionMethodName")', student).done(function (data) {
    //traiter le résultat renvoyé par ActionMethod}
    });
});

0voto

Nicklas Forss Points 793

Vous pouvez appeler la validation du modèle manuellement dans la méthode du contrôleur. La syntaxe est simplement ValidateModel(model). Cela valide le modèle en fonction de ses valeurs de propriété actuelles, et remplit le dictionnaire ModelState avec d'éventuelles erreurs.

Si votre modèle ne se remplit pas avec les valeurs, mais que vous les avez à portée de main, vous pouvez le remplir en utilisant UpdateModel(model, values), une autre méthode héritée de la classe Controller.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X