J'ai ajouté des contrôles de validation dans mon contrôleur qui modifient la ModelState
si la validation échoue.
Par exemple:
private bool ValidateMoney(string raw, string name, decimal min, decimal max) {
try {
var dec = Convert.ToDecimal(raw);
if (dec < min) {
throw new ArgumentOutOfRangeException(name + " must be >= " + min);
}
else if (dec > max) {
throw new ArgumentOutOfRangeException(name + " must be <= " + max);
}
}
catch (Exception ex) {
ModelState.AddModelError(name, ex.GetUserMessage());
}
return ModelState.IsValid;
}
Cependant, je ne connais jamais la valeur à transmettre pour le paramètre key
dans ModelState.AddModelError
. (Dans l'exemple, je viens de définir le nom d'affichage de mon interface utilisateur.)
Quel est le paramètre et comment dois-je l'utiliser?
La clé est utilisée par l'assistant HTML ValidationMessage pour connaître le message d'erreur exact à afficher.
Exemple:
<%=Html.TextBox("Name") %> <br />
<%=Html.ValidationMessage("Name") %>
l'assistant ValidationMessage affiche le message contenant la clé "Nom" dans le dictionnaire ModelState.
Le paramètre key
peut être utilisé pour associer l'erreur de validation à un champ de formulaire et ainsi contrôler l'emplacement d'affichage du message à l'écran. Il peut être utilisé avec des entrées de type HtmlHelper et avec des entrées HTML simples.
Si vous avez utilisé @Html.TextBoxFor
(ou similaire) et un @Html.ValidationMessageFor
, vous pouvez obtenir la valeur de la clé à partir de la variable HTML name
du champ en cours de validation (utilisez l'élément inspecter).
Si vous venez d'utiliser un <input>
HTML, vous pouvez ajouter un espace réservé à la validation à l'aide de @Html.ValidationMessage("AKeyIMadeUp")
et faire en sorte qu'un message y apparaisse comme suit: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");
.
En fait, vous pouvez définir n’importe quel message de validation lorsque la soumission de votre formulaire échoue Si vous créez un champ dans le modèle.
[Required]
[DataType(DataType.Password)]
[Display(Name = "Current password")]
public string OldPassword { get; set; }
et tant que votre modelState est invalide, vous pouvez définir un lien de message d'erreur avec ce champ comme en tant que.
ModelState.AddModelError("OldPassword", "Current Password do not match ");
alors votre message d'erreur sera lié au champ du modèle nommé "OldPassword"
Désolé pour Necropost. Les réponses ci-dessus n'avaient pas ce détail que je pensais être utile (c'était ce que je cherchais !!)
Afin de créer des erreurs de validation "Wide Wide Model" - vous devez simplement ajouter string.Empty en tant que clé.
par exemple.
ModelState.AddModelError(string.Empty, "This is my Model Level Message");
Merci à: http://www.tutorialsteacher.com/mvc/htmlhelper-validationsummary pour le conseil.