validate regular only number mvc length datatype dataannotations custom asp.net-mvc asp.net-mvc-3 data-annotations

asp.net-mvc - regular - datatype datatype number



Atributo de validaciĆ³n Int o Number DataType for DataAnnotation (5)

Para cualquier validación de número, debe usar diferentes validaciones de rango diferentes según sus requisitos:

Por entero

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]

para flotar

[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]

para doble

[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]

En mi proyecto MVC3, almaceno la predicción de puntaje para fútbol / fútbol / hockey / ... juego deportivo. Entonces una de las propiedades de mi clase de predicción se ve así:

[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; }

Ahora, también necesito cambiar el mensaje de error para un tipo de datos, int en mi caso. Se utiliza una predeterminada: "El campo HomeTeamPrediction debe ser un número". Necesita encontrar una forma de cómo cambiar este mensaje de error. Este mensaje de validación también parece tomar predicción para Validación remota uno.

He intentado con el atributo [DataType] pero este no parece ser un número simple en la enumeración de tipo de sistema system.componentmodel.dataannotations.datatype .


Prueba la expresión regular

[RegularExpression("([0-9]+)")] // for 0-inf or [RegularExpression("([1-9][0-9]*)"] // for 1-inf

Espero que ayude: D


Pruebe este atributo:

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; } }

Y también debe registrar el atributo en el plugin de validación:

if($.validator){ $.validator.unobtrusive.adapters.add( ''numeric'', [], function (options) { options.rules[''numeric''] = options.params; options.messages[''numeric''] = options.message; } ); }


Use expresiones regulares en la anotación de datos

[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")] public int MaxJsonLength { get; set; }


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; } }