IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

MVC 4 et Custom validation


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Par défaut MVC 4 et Custom validation
    Bonjour !

    Je souhaite ajouter des validations customisées pour certains champs. Voici ce que j'ai écrit pour le moment, en suivant un tutorial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [MetadataType(typeof(UtilisateurCustom))]
        public partial class utilisateur {}
     
        public class UtilisateurCustom {
     
            [Required]
            public string Mail {get; set;}
     
            [UserDoesNotExist]
            public string Nom { get; set; }
        }
     
    [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
        public class UserDoesNotExist : ValidationAttribute
        {
            public UserDoesNotExist() : base("Cet utilisateur existe déjà !") { }
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                return new ValidationResult("Nok");
            }
        }
    La validation [Required] fonctionne sans problème, par contre la validation [UserDoesNotExist] ne se déclenche pas du tout, aucun message n'étant renvoyé vers le navigateur.

    Merci d'avance pour ceux qui voudront bien m'indiquer ce qui manque (je débute)

  2. #2
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    Dans la méthode IsValid, tu dois mettre une logique de validation.
    Si Nom existe alors
    retourne message "Cet utilisateur existe déjà !"
    sinon
    retourne message "Ok"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Par défaut
    J'ai modifié mon code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
        public class UserDoesNotExist : ValidationAttribute
        {
            public UserDoesNotExist() : base("Cet utilisateur existe déjà !") { }
            protected override ValidationResult IsValid(object value, ValidationContext validationContext)
            {
                string test = (string)value;
                if (String.IsNullOrEmpty(test))
                {
                    return new ValidationResult("Nok");
                }
                else
                {
                    return ValidationResult.Success;
                }
            }
        }
    Malgré celà, je n'obtiens toujours rien. J'ai placé un breakpoint sur la ligne "string test = ..." et on dirait que le programme ne passe même pas par là.

  4. #4
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    J'ai lu un peu vite, le problème ne vient peut-être pas de l'implémentation de la méthode.

    J'ai testé chez moi dans un cas similaire et ça fonctionne.
    Quel est le code de la vue et du controller ? C'est bien un envoie de formulaire que tu fais ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Par défaut
    Ce sont des modèles et vues générées automatiquement par l'EDI, je n'y ai pas du tout touché. La classe est également générée par l'éditeur avec une connexion MySQL (c'est pourquoi j'ai créé une buddyClass pour ajouter des validations supplémentaires).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using RandomMeeting_v2.Models;
     
    namespace RandomMeeting_v2.Controllers
    {
        public class UtilisateurController : Controller
        {
            private meetingEntities db = new meetingEntities();
     
            //
            // GET: /Default1/
     
            public ActionResult Index()
            {
                return View(db.utilisateur.ToList());
            }
     
            //
            // GET: /Default1/Details/5
     
            public ActionResult Details(int id = 0)
            {
                utilisateur utilisateur = db.utilisateur.Single(u => u.ID == id);
                if (utilisateur == null)
                {
                    return HttpNotFound();
                }
                return View(utilisateur);
            }
     
            //
            // GET: /Default1/Create
     
            public ActionResult Create()
            {
                return View();
            }
     
            //
            // POST: /Default1/Create
     
            [HttpPost]
            public ActionResult Create(utilisateur utilisateur)
            {
                if (ModelState.IsValid)
                {
                    db.utilisateur.AddObject(utilisateur);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
     
                return View(utilisateur);
            }
     
            //
            // GET: /Default1/Edit/5
     
            public ActionResult Edit(int id = 0)
            {
                utilisateur utilisateur = db.utilisateur.Single(u => u.ID == id);
                if (utilisateur == null)
                {
                    return HttpNotFound();
                }
                return View(utilisateur);
            }
     
            //
            // POST: /Default1/Edit/5
     
            [HttpPost]
            public ActionResult Edit(utilisateur utilisateur)
            {
                if (ModelState.IsValid)
                {
                    db.utilisateur.Attach(utilisateur);
                    db.ObjectStateManager.ChangeObjectState(utilisateur, EntityState.Modified);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(utilisateur);
            }
     
            //
            // GET: /Default1/Delete/5
     
            public ActionResult Delete(int id = 0)
            {
                utilisateur utilisateur = db.utilisateur.Single(u => u.ID == id);
                if (utilisateur == null)
                {
                    return HttpNotFound();
                }
                return View(utilisateur);
            }
     
            //
            // POST: /Default1/Delete/5
     
            [HttpPost, ActionName("Delete")]
            public ActionResult DeleteConfirmed(int id)
            {
                utilisateur utilisateur = db.utilisateur.Single(u => u.ID == id);
                db.utilisateur.DeleteObject(utilisateur);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
     
            protected override void Dispose(bool disposing)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    @model RandomMeeting_v2.Models.utilisateur
     
    @{
        ViewBag.Title = "Create";
    }
     
    <h2>Create</h2>
     
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
     
        <fieldset>
            <legend>utilisateur</legend>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.Mail)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Mail)
                @Html.ValidationMessageFor(model => model.Mail)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.Nom)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Nom)
                @Html.ValidationMessageFor(model => model.Nom)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.Prenom)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Prenom)
                @Html.ValidationMessageFor(model => model.Prenom)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.DateNaissance)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.DateNaissance)
                @Html.ValidationMessageFor(model => model.DateNaissance)
            </div>
     
            <div class="editor-label">
                @Html.LabelFor(model => model.Password)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Password)
                @Html.ValidationMessageFor(model => model.Password)
            </div>
     
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
     
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
     
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

Discussions similaires

  1. [Spring MVC] SimpleFormController, Command et Validator
    Par ginkas31 dans le forum Spring Web
    Réponses: 6
    Dernier message: 22/02/2008, 15h36
  2. [2.0] Custom validator (traitement cote serveur)
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 0
    Dernier message: 02/09/2007, 14h16
  3. Message personnalisé et custom validator
    Par sir_gcc dans le forum JSF
    Réponses: 2
    Dernier message: 26/05/2007, 11h40
  4. Réponses: 5
    Dernier message: 10/07/2006, 15h02
  5. Réponses: 2
    Dernier message: 16/02/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo