Je vérifie ma base de données Create(FooViewModel fvm){...}
pour voir si fvm.prop1
et fvm.prop2
existe déjà dans cette combinaison; si tel est le cas, je souhaite ajouter une erreur à l'état du modèle, puis renvoyer la vue entière. J'ai essayé:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... mais je n'obtiens aucun affichage des erreurs dans le Html.ValidationSummary
, où je suppose qu'elles apparaîtront. Je soupçonne que "Model" n'est pas la bonne clé, mais je n'ai rien trouvé à la Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Scott Baker
la source
la source
Réponses:
Je suis finalement tombé sur un exemple d'utilisation que je recherchais - pour attribuer une erreur au modèle en général, plutôt qu'à l'une de ses propriétés, comme d'habitude, vous appelez:
mais utilisez une chaîne vide pour la clé:
Le message d'erreur se présentera dans le
<%: Html.ValidationSummary() %>
comme prévu.la source
ModelState.AddError(errorMessage)
ouModelState.AddGlobalError(errorMessage)
... il serait intuitif et plus facile de savoir comment ajouter un message d'erreur non lié aux propriétés d'un modèle.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
surcharge affichera toutes les erreurs de validation si son argument est faux ou seulement des erreurs non spécifiques à la propriété (clé = "") si son argument est vrai.Vous pouvez ajouter l'erreur de modèle sur n'importe quelle propriété de votre modèle, je suggère s'il n'y a rien de lié pour créer une nouvelle propriété.
À titre d'exemple, nous vérifions si l'e-mail est déjà utilisé dans DB et ajoutons l'erreur à la propriété Email dans l'action afin que lorsque je retourne la vue, ils sachent qu'il y a une erreur et comment l'afficher en utilisant
et
la source
(m=>m.email).SomeMagicToString()
?nameof
opérateur entrant dans C # 6.0 résout ce problème de chaîne magique. msdn.microsoft.com/en-us/magazine/dn802602.aspxMettre la propriété de point de modèle dans des chaînes a fonctionné pour moi:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
la source