web-dev-qa-db-fra.com

Quel est le point du paramètre key dans ModelState.AddModelError dans ASP.NET MVC?

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?

43
Frank Krueger

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.

54
user434917

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");.

12
OutstandingBill

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"

3
mk Mughal

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.

0
yeti_c