130 votes

Attribut de validation Int ou Nombre DataType pour DataAnnotation

Sur mon MVC3 projet, je stocke score de prédiction pour le football/football/hockey/... jeu de sport. Ainsi, l'une des propriétés de ma prédiction de la classe 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, je dois aussi changer de message d'erreur pour un type de données, int dans mon cas. Il y a quelques utilisé par défaut - "Le domaine HomeTeamPrediction doit être un nombre.". Besoin de trouver un moyen de changer ce message d'erreur. Ce message de validation semblent également prendre prédiction pour validation à Distance un.

J'ai essayé d' [DataType] d'attribut, mais cela ne semble pas être une simple nombre en system.componentmodel.dataannotations.datatype énumération.

Merci,

Antonin

252voto

Dilip0165 Points 655

Pour toute validation de numéro, vous devez utiliser différentes validations de plages en fonction de 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")]
 

91voto

Goran Žuri Points 732

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

28voto

AlexBar Points 441

Essayez http://dataannotationsextensions.org/ , il a des attributs utiles comme Integer, Min / Max, etc.

9voto

Stuart Dobson Points 388
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;
    }
}

6voto

Stefan Turcanu Points 135

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 aussi vous devez 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;
    });
 

}

J'espère que cela aide: D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X