web-dev-qa-db-fra.com

Comment changer le ErrorMessage pour la validation de modèle int dans ASP.NET MVC?

J'ai un modèle avec une propriété définie comme ceci:

    [Required(ErrorMessage="Please enter how many Stream Entries are displayed per page.")]
    [Range(0,250, ErrorMessage="Please enter a number between 0 and 250.")]
    [Column]
    public int StreamEntriesPerPage { get; set; }

Cela fonctionne sauf si l'utilisateur entre quelque chose comme "100q". Ensuite, une erreur plutôt laide s'affiche: "La valeur '100q' n'est pas valide pour StreamEntriesPerPage."

Existe-t-il un attribut que je peux utiliser pour remplacer le message d'erreur par défaut lorsque l'entrée n'est pas un entier?

26
quakkels

Oui, vous pouvez utiliser Extensions d'annotations de données , marquez votre propriété comme suit:

[Required(ErrorMessage = "Please enter how many Stream Entries are displayed per page.")]
[Range(0, 250, ErrorMessage = "Please enter a number between 0 and 250.")]
[Column]
[DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]
public int StreamEntriesPerPage { get; set; }
23
Feras Kayyali

Essayez d'ajouter 

[RegularExpression("\\d+", ErrorMessage = "some message here")]

Article de blog de référence

9
Bala R

Tout comme la suggestion de Feras, mais sans la dépendance externe:

using System;
using System.ComponentModel.DataAnnotations;

namespace MyDataAnnotations
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public class IntegerAttribute : DataTypeAttribute
    {
        public IntegerAttribute()
            : base("integer")
        {
        }

        public override string FormatErrorMessage(string name)
        {
            if (ErrorMessage == null && ErrorMessageResourceName == null)
            {
                ErrorMessage = "Enter an integer"; // default message
            }

            return base.FormatErrorMessage(name);
        }

        public override bool IsValid(object value)
        {
            if (value == null) return true;

            int retNum;

            return int.TryParse(Convert.ToString(value), out retNum);
        }
    }
}

Ensuite, vous pouvez décorer avec un attribut [Integer(ErrorMessage="...")].

8
Kieren Johnstone

J'ai eu le même problème, cette solution l'a résolu:

  • Créez un dossier App_GlobalResources pour votre projet (cliquez avec le bouton droit de la souris sur projet -> Ajouter -> Ajouter un dossier ASP.NET -> App_GlobalResources).
  • Ajouter un fichier resx dans ce dossier. Dites MyNewResource.resx.
  • Ajoutez la clé de ressource PropertyValueInvalid au format de message souhaité (par exemple, "le contenu {0} n'est pas valide pour le champ {1}"). Si vous souhaitez modifier PropertyValueRequired, ajoutez-le également.
  • Ajoutez le code DefaultModelBinder.ResourceClassKey = "MyNewResource" à votre code de démarrage Global.asax.

from: Comment changer le message d'erreur de validation par défaut dans ASP.NET MVC?

6
tarn

Essaye ça:

[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }
0
Thien

ErrorMessage ne fonctionnait pas avec Range-attribut pour moi. J'ai fini par utiliser un attribut RegularExpression.

Au lieu de:

[Range(0, 9, ErrorMessage = "...")]
public int SomeProperty { get; set; }

J'ai utilisé:

[RegularExpression("^[0-9]$", ErrorMessage = "..."]
public int SomeProperty { get; set; }

Vous pouvez trouver des modèles d’expression rationnelle pour d’autres gammes sur https://www.regular-expressions.info/numericranges.html

0
Per