2010-12-29 12 views
5

Estoy usando jquery para la validación del lado del cliente junto con las anotaciones de datos. Todo funciona bien, pero me gustaría localizar un mensaje cuando se ingresa un valor no numérico en el cuadro de texto numérico. Pero para la validación del lado del cliente asp.net mvc está usando su propio archivo de recursos con la clave 'ClientDataTypeModelValidatorProvider_FieldMustBeNumeric'."El ancho del campo debe ser un número". en el lado del cliente

¿Cómo puedo hacer?

Gracias.

+0

posible duplicado de [validación asp.net mvc debe ser un error de número personalizado] (http://stackoverflow.com/questions/ 4521254/asp-net-mvc-validation-must-be-a-number-custom-error) –

Respuesta

2

Busque solución al final de esta página:

http://jwwishart.wordpress.com/2010/03/22/custom-server-and-client-side-required-validator-in-mvc-2-using-jquery-validate/

he comprobado esto en mi proyecto MVC 3 RTM y funciona bien.

+0

Implementé lo que Justin Wishart escribió en el enlace anterior sobre ClientDataTypeModelValidatorProvider. Usé Reflector para obtener el código de clase original y apunté el nuevo código a mi recurso de Localización. Está funcionando perfectamente en ASP.NET MVC 3. –

2

Tuve el mismo problema porque soy italiano y aquí los números decimales están formateados con coma en lugar de punto. Entonces, lo que en los Estados Unidos es 1,000.12 aquí está escrito en 1,000,12. Así es como lo resolví, después de algunas búsquedas: MVC3 ya incluye el guión jquery.validate.js/jquery.validate.min.js y eso es increíble.

Luego agregué otro script - methods-it.js - tomado de la carpeta de localización de jquery validate plugin y cambiado un poco.

jQuery.extend(jQuery.validator.methods, { 
    date: function (value, element) { 
     return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); 
    }, 
    number: function (value, element) { 
     return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); 
    }, 
    range: function (value, element, param) { 
     var val = value.replace(",", "#").replace(".", ",").replace("#", "."); 
     return this.optional(element) || (val >= param[0] && val <= param[1]); 
    } 
}); 

Este pequeño código trata de fechas (formato italiano), números flotantes y rango de valores. ¡Funciona de maravilla, ahora! Desafortunadamente, esta es solo una dirección y no la solución, porque debe corregirse para cada localidad.

+0

jQuery.validator no está definido ¿Qué me estoy perdiendo? –

+0

Error de tiempo de ejecución de Microsoft JScript: no se puede obtener el valor de los 'métodos' de la propiedad: el objeto es nulo o indefinido. ¿Me estoy perdiendo de algo? – Jorre

0

me pareció más fácil de usar sólo DataAnnotations en el modelo de vista:

[RegularExpression("([0-9]+)", ErrorMessageResourceType = typeof(ErrorMessage), ErrorMessageResourceName = "NumberInvalid")] 
Cuestiones relacionadas