Je veux extraire tous les messages d'erreur de modelState sans connaître les valeurs clés. En boucle pour récupérer tous les messages d'erreur que contient le ModelState.
Comment puis-je faire ceci?
asp.net-mvc
modelstate
chobo2
la source
la source
@Html.ValidationSummary()
c'est un moyen rapide de les afficher toutes dans le rasoir.foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors)) { DoSomething(error); }
Réponses:
Voir aussi Comment obtenir la collection des erreurs d'état du modèle dans ASP.NET MVC? .
la source
Value.ErrorMessage
et à la place unValue.Exception.Message
foreach (KeyValuePair<string, ModelState> kvp in htmlHelper.ViewData.ModelState) {
et insérer cette ligne en dessous:var modelState = kvp.Value;
. Vous pouvez obtenir la clé dekvp.Key
Utilisation de LINQ :
la source
List<string> errors = new List<string>()
au lieu devar errors = new List<string>()
est vraiment une perte de temps, mais l'écritureIEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
, où le type de retour n'est pas vraiment clair, est vraiment plus grande en termes de lisibilité. (même si Visual Studio peut vous le donner auEn s'appuyant sur la version LINQ, si vous souhaitez joindre tous les messages d'erreur en une seule chaîne:
la source
J'ai pu le faire en utilisant un petit LINQ,
La méthode ci-dessus renvoie une liste d'erreurs de validation.
Lectures complémentaires:
Comment lire toutes les erreurs de ModelState dans ASP.NET MVC
la source
Pendant le débogage, je trouve utile de mettre un tableau au bas de chacune de mes pages pour montrer toutes les erreurs ModelState.
la source
Comme j'ai découvert avoir suivi les conseils des réponses données jusqu'à présent, vous pouvez obtenir des exceptions sans que des messages d'erreur ne soient définis.Par conséquent, pour détecter tous les problèmes, vous devez vraiment obtenir à la fois le message d'erreur et l'exception.
ou comme méthode d'extension
la source
Si quelqu'un souhaite renvoyer le nom de la propriété Model pour lier le message d'erreur dans une vue fortement typée.
De cette façon, vous pouvez réellement lier l'erreur au champ qui a provoqué l'erreur.
la source
Produire uniquement les messages d'erreur eux-mêmes n'était pas suffisant pour moi, mais cela a fait l'affaire.
la source
Pour juste au cas où quelqu'un en aurait besoin, j'ai créé et utilise la classe statique suivante dans mes projets
Exemple d'utilisation:
Utilisations:
Classe:
la source
Et cela fonctionne aussi:
la source
SelectMany
est disponible.Utile pour transmettre un tableau de messages d'erreur à View, peut-être via Json:
la source
Cela élargit la réponse de @Dunc. Voir les commentaires de doc xml
la source
De plus,
ModelState.Values.ErrorMessage
peut être vide, maisModelState.Values.Exception.Message
peut indiquer une erreur.la source
Dans votre implémentation, il vous manque la classe statique, ce devrait être le cas.
plutôt
la source
utilisez simplement asp-validation-summary Tag Helper
la source