J'ai un problème avec Html.ValidationSummary. Je ne veux pas afficher les erreurs de propriété dans ValidationSummary. Et lorsque j'ai défini Html.ValidationSummary (true), il n'affiche pas les messages d'erreur de ModelState. Lorsqu'il y a une exception dans l'action du contrôleur sur la chaîne
MembersManager.RegisterMember(member);
la section catch ajoute une erreur au ModelState:
ModelState.AddModelError("error", ex.Message);
Mais ValidationSummary n'affiche pas ce message d'erreur. Lorsque j'ai défini Html.ValidationSummary (false), tous les messages s'affichent, mais je ne veux pas afficher les erreurs de propriété. Comment puis-je résoudre ce problème?
Voici le code que j'utilise:
Modèle:
public class Member
{
[Required(ErrorMessage = "*")]
[DisplayName("Login:")]
public string Login { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Password:")]
public string Password { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Confirm Password:")]
public string ConfirmPassword { get; set; }
}
Manette:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (!ModelState.IsValid)
return View();
MembersManager.RegisterMember(member);
}
catch (Exception ex)
{
ModelState.AddModelError("error", ex.Message);
return View(member);
}
}
Vue:
<% using (Html.BeginForm("Register", "Members", FormMethod.Post,
new { enctype = "multipart/form-data" })) {%>
<p>
<%= Html.LabelFor(model => model.Login)%>
<%= Html.TextBoxFor(model => model.Login)%>
<%= Html.ValidationMessageFor(model => model.Login)%>
</p>
<p>
<%= Html.LabelFor(model => model.Password)%>
<%= Html.PasswordFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</p>
<p>
<%= Html.LabelFor(model => model.ConfirmPassword)%>
<%= Html.PasswordFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</p>
<div>
<input type="submit" value="Create" />
</div>
<%= Html.ValidationSummary(true)%>
<% } %>
ModelState.AddModelError(string.Empty, ex);
cela ne semble pas fonctionner non plus. Vous devez utiliser laModelState.AddModelError(string, string)
surcharge comme indiqué ci-dessus.Cela fonctionne mieux, car vous pouvez afficher validationMessage pour une clé spécifiée:
et l'afficher comme ceci:
la source
Je sais que c'est un peu vieux et a été marqué comme réponse avec 147 votes positifs, mais il y a autre chose à considérer.
Vous pouvez avoir toutes les erreurs de modèle, la propriété nommée et la chaîne. Les clés vides de même, être affichées dans le ValidationSummary si vous en avez besoin. Il y a une surcharge dans le ValidationSummary qui fera cela.
la source
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
pour@Html.ValidationSummary(false, "", new { @class = "text-danger" })
Peut-être comme ça:
Et dans l'affichage, ajoutez:
OU
la source
L'utilisation de cette ligne peut être utile
la source
Dans mon cas, cela ne fonctionnait pas à cause du retour.
À la place d'utiliser:
J'ai utilisé:
C'est un modèle, c'est donc bien évidemment
ModelState.AddModelError("keyName","Message");
un modèle qui doit fonctionner avec un modèle.Cette réponse montre pourquoi. Ajout de validation avec DataAnnotations
la source
Si presque tout semble correct, une autre chose à surveiller est de vous assurer que le résumé de validation n'est pas explicitement masqué via une substitution CSS comme celle-ci:
Cela peut également faire
@Html.ValidationSummary
apparaître le caché, car le résumé est rendu dynamiquement avec lavalidation-summary-valid
classe.la source
Tu peux essayer,
la source
AJOUTEZ-le dans la partie la plus basse de votre vue:
la source