Sur mon projet MVC3, je stocke les prévisions de score pour les matchs de football/soccer/hockey/... sport. Donc, une des propriétés de ma classe de prédiction ressemble à ceci:
[Range(0, 15, ErrorMessage = "Can only be between 0 .. 15")]
[StringLength(2, ErrorMessage = "Max 2 digits")]
[Remote("PredictionOK", "Predict", ErrorMessage = "Prediction can only be a number in range 0 .. 15")]
public int? HomeTeamPrediction { get; set; }
Maintenant, j'ai aussi besoin de changer le message d'erreur pour un type de données, int
dans mon cas. Il y en a un par défaut utilisé - "Le champ HomeTeamPrediction doit être un nombre". Besoin de trouver un moyen de changer ce message d'erreur. Ce message de validation semble également prendre prévision pour la validation à distance.
J'ai essayé l'attribut [DataType]
mais cela ne semble pas être un simple numéro dans l'énumération system.componentmodel.dataannotations.datatype
.
Pour toute validation de numéro, vous devez utiliser différentes validations de plages selon vos besoins:
Pour Integer
[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
pour float
[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
pour double
[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]
Essayez l'expression régulière
[RegularExpression("([0-9]+)")] // for 0-inf or
[RegularExpression("([1-9][0-9]*)"] // for 1-inf
espérons que cela aide: D
Utiliser regex dans les annotations de données
[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")]
public int MaxJsonLength { get; set; }
Essayez cet attribut:
public class NumericAttribute : ValidationAttribute, IClientValidatable {
public override bool IsValid(object value) {
return value.ToString().All(c => (c >= '0' && c <= '9') || c == '-' || c == ' ');
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "numeric"
};
yield return rule;
}
}
Et vous devez également enregistrer l'attribut dans le plugin validateur:
if($.validator){
$.validator.unobtrusive.adapters.add(
'numeric', [], function (options) {
options.rules['numeric'] = options.params;
options.messages['numeric'] = options.message;
}
);
}
public class IsNumericAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
decimal val;
var isNumeric = decimal.TryParse(value.ToString(), out val);
if (!isNumeric)
{
return new ValidationResult("Must be numeric");
}
}
return ValidationResult.Success;
}
}
près d’une décennie s’est écoulée, mais le problème est toujours valable avec Asp.Net Core 2.2.
Je l'ai géré en ajoutant data-val-number
au champ de saisie, la localisation d'utilisation sur le message:
<input asp-for="Age" data-val-number="@_localize["Please enter a valid number."]"/>