Je vérifie ma base de données dans Create(FooViewModel fvm){...}
pour voir si fvm.prop1
et fvm.prop2
existent déjà dans cette combinaison; si tel est le cas, je souhaite ajouter une erreur à l'état de la modélisation, puis renvoyer la vue complète. 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 pas d’affichage d’erreurs dans le Html.ValidationSummary
, c’est là que je suppose qu’elles apparaissent. Je soupçonne que "Modèle" n'est pas la bonne clé, mais je n'ai rien trouvé à la Google.
Je suis finalement tombé sur n exemple de l'utilisation que je cherchais - 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:
ModelState.AddModelError(string key, string errorMessage);
mais utilisez une chaîne vide pour la clé:
ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");
Le message d'erreur se présentera dans la <%: Html.ValidationSummary() %>
comme vous le souhaitiez.
Vous pouvez ajouter l'erreur de modèle sur n'importe quelle propriété de votre modèle. Je suggère qu'il n'y ait rien de lié à la création d'une nouvelle propriété.
A titre d'exemple, nous vérifions si l'e-mail est déjà utilisé dans la base de données et ajoutons l'erreur à la propriété Email de l'action. Ainsi, lorsque je reviens à la vue, ils savent qu'il y a une erreur et comment l'afficher en utilisant
<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>
et
ModelState.AddModelError("Email", Resources.EmailInUse);
Mettre la propriété de points du modèle dans des chaînes a fonctionné pour moi: ModelState.AddModelError("Item1.Month", "This is not a valid date");