2017-05-10 1 views
1

Mon programme a des utilisateurs qui peuvent créer un projet (qui se comportent comme des dossiers) et dans les projets, l'utilisateur peut ajouter des documents. L'utilisateur peut partager le projet avec un autre utilisateur.Message d'erreur de ModelState.AddModelError() n'apparaît pas

J'ai empêché qu'un utilisateur puisse ajouter la même personne deux fois dans le même projet mais je ne peux pas sembler afficher le message d'erreur que je veux.

Le courrier électronique a des attributs obligatoires et ces messages d'erreur apparaissent (à la fois s'il est invalide et si la case est vide). Est-ce que je n'utilise pas le droit ModelState.AddErrorMessage()?

Voici comment la variable est dans le modèle

[EmailAddress(ErrorMessage ="Please enter a valid email address!")] 
    [Display(Name = "Email")] 
    [Required(ErrorMessage = "You must enter an email!")] 
    public string email { get; set; } 

Ceci est une partie de mon contrôleur

//Prevent double share 
List<ProjectModel> userProjects = projectService.getAllProjects(user.email); 
    foreach(var proj in userProjects) 
    { 
     if(proj.name == userService.getProjectByID(urlInt).name) 
     { 
      //This is the error message I am trying to display 
      ModelState.AddModelError(user.email, "This user already has access to this project!"); 
      return View(user); 
     } 
    } 
userService.share(user.email, urlInt); 
return RedirectToAction("../Dashboard/Dashboard"); 

Ceci est mon Voir

@using (Html.BeginForm("Share", "User", FormMethod.Post, new { @class = "add-document-form" })) 
{ 
    <div class="add-document-div"> 
     <div class="form-group"> 
      <label for="email" class="control-label">Email address</label> 
      <br /> 
      @Html.TextBoxFor(m => m.email, new { @class = "form-conrtol" }) 
      <br /> 

      <!--Here is the validation for the email button--> 
      @Html.ValidationMessageFor(m => m.email, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <input type="submit" class="btn btn-fab" value="Send invitation" /> 
} 

Répondre

1

La surcharge pour ModelState.AddModelError que vous utilisez prend deux paramètres; le nom de la propriété de modèle pour ajouter l'erreur à, et l'erreur réelle. Vous devez vous assurer que le premier paramètre est le nom correct. Dans ce cas, je suppose "email".

Actuellement, vous lui donnez ce que contient user.email plutôt que le nom du champ.

+0

Merci beaucoup pour votre réponse rapide! J'ai changé le 'user.email' à' "email" 'qui est le nom de la variable mais le message ne montre toujours pas. Une idée pourquoi? –

+0

La chaîne vide '' "' est surchargée avec AddModelError –

+0

Hmm ... cela ne semble pas fonctionner, peut-être que cela n'écrase pas les validations qui sont données dans le modèle. Peut-être que je dois penser à une autre approche. Merci pour les suggestions! –

0

C'est la syntaxe pour

ModelState.AddErrorModel("<some form field name>", "<your error message>"); 

Le premier paramètre est le nom du champ de formulaire afin que mvc sait où lier le message d'erreur.

ModelState.AddModelError(user.email, "This user already has access to this project!"); 

essaie de lier le message d'erreur à la valeur de user.email. Cela n'existe pas dans votre formulaire.

0

Pour ajouter des erreurs via le contrôleur de validation côté serveur il vous suffit de fournir le nom de la clé sous forme de chaîne .. donc dans votre cas cela devrait fonctionner:

ModelState.AddErrorModel("email", "This user already has access to this project!"); 
return View(user); 

Laissez-moi savoir si cela aide!

+0

Merci pour la réponse! J'ai changé le 'user.email' en' "email" 'qui est le nom de la variable mais le message ne montre toujours pas. Une idée pourquoi? –

+0

Avez-vous une ligne dans votre formulaire qui ressemble à ceci: '@ Html.ValidationSummary (true," ", new {@class =" text-danger "})'? –

0

Il s'est avéré que j'avais juste besoin de changer user.email à "email" comme cela avait déjà été souligné.

La raison pour laquelle cela ne fonctionnait pas pour moi à ce moment-là était parce qu'une autre personne nettoyait notre ServiceBase et brisait ma connexion à la base de données de sorte que mon formulaire ne s'affichait pas du tout. Après j'ai résolu que le message d'erreur s'affiche.

Merci pour votre aide à tous!