2017-10-20 25 views
0

Je veux passer une notification de connexion d'erreur dans la vue que j'ai codé moi-même, mais je ne sais pas comment. Je veux le mettre dans le @Html.ValidationMessageFor(model => model.UserName) et @Html.ValidationMessageFor(model => model.Password) ou une étiquette distincte (suis-je raison que je vais utiliser @Html.ValidationMessage() au lieu de @Html.ValidationMessageFor()?)Comment passer une notification de connexion personnalisée a échoué à la vue dans MVC4

ici est mon modèle:

public class User 
{ 
    public int UserId { get; set; } 

    [Required] 
    [Display(Name = "User Name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    public string Password { get; set; } 
} 

ici est mon contrôleur:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Login(User p) 
{ 
    if (ModelState.IsValid) 
    { 
     User item = db.Authenticate(p); 

     if (item != null) // if item is not null, the login succeeded 
     { 
      return RedirectToAction("Main", "Home"); 
     } 
    } 
    string error = "Incorrect user name or password."; // I don't know how to pass this 
    return View(); //login failed 
} 

voici mon avis:

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>User</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserName) 
      @Html.ValidationMessageFor(model => model.UserName) 
     </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="Login" /> 
     </p> 
    </fieldset> 
} 

Répondre

1

Vous pouvez ajouter le message d'erreur personnalisé au dictionnaire d'états du modèle à l'aide de la méthode AddModelError. Les méthodes d'assistance validationSummary/ValidationMessageFor lisent les erreurs de validation du dictionnaire d'état du modèle lorsqu'il est appelé.

Le premier paramètre est la clé du message d'erreur. Si vous passez string.empty comme valeur le message d'erreur personnalisé vous passez sera rendu par la méthode d'aide ValidationSummary

ModelState.AddModelError(string.Empty,"Incorrect user name or password."); 
return View(p); 

Si vous voulez rendre le message d'erreur par l'élément d'entrée (celui ValidationMessageFor rend), vous pouvez transmettez le nom de la propriété en tant que valeur clé lors de l'appel de la méthode AdddModelError.

ModelState.AddModelError(nameof(User.Password),"Incorrect password"); 
return View(); 
0

Nous pouvons utiliser la méthode AddModelError pour la gestion des messages d'erreur personnalisé

ModelState.AddModelError(nameof(User.UserName),"Incorrect UserName"); 
ModelState.AddModelError(nameof(User.Password),"Incorrect password"); 
return View();