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?
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; }
Essayez d'ajouter
[RegularExpression("\\d+", ErrorMessage = "some message here")]
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="...")]
.
J'ai eu le même problème, cette solution l'a résolu:
App_GlobalResources
pour votre projet (cliquez avec le bouton droit de la souris sur projet -> Ajouter -> Ajouter un dossier ASP.NET -> App_GlobalResources).MyNewResource.resx
.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.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?
Essaye ça:
[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }
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