10

Mi configuración regional utiliza una coma ,, y no un punto . para el separador decimal.Edición de MVC3 para campos decimales y localización

En MVC3, al abrir una vista Editar donde los valores decimales se muestran con

@Html.EditorFor(model => model.MyDecimalVal) 

el valor se muestra correctamente.

Cuando ingreso valor con coma, obtengo el error "El valor no es un número" y si ingreso valor con punto, no obtengo ningún error, pero en realidad no se guarda ningún valor.

¿Cómo manejar esta situación?

Respuesta

6

Moverse con esta mediante la deformación de su lógica de validación ya se ha explicado hasta aquí es un enfoque diferente.

Coloque el siguiente código dentro de su archivo web.config debajo del nodo <system.web> si desea establecer el cultivo en en. Se hará cargo de delimitador de decimales:

<globalization culture="en-US" uiCulture="en" /> 

No estoy seguro, pero para DateTime, usted todavía está obligado a la configuración regional del servidor.

+1

Gracias, esto se ocupó tanto de los formatos de fecha y hora (pero los forzó en la configuración local) – bzamfir

+1

@bzamfir derecha. Lo que llamo este enfoque es una solución temporal. La solución permanente sería configurar las configuraciones regionales de tu servidor. – tugberk

+4

cómo en el mundo es esta una solución - forzando la cultura al inglés? – gangelo

16

This blog post recomienda anular las reglas de número y rango de jQuery predeterminadas para habilitar la compatibilidad con el lado del cliente del separador decimal en coma.

Para solucionar estos problemas, podemos tomar la implementación predeterminada del archivo jquery.validate.js para la gama() funciones() y el número. Nosotros creamos otro archivo .js (digamos jQueryFixes.js), en el cual anulamos estas funciones predeterminadas con las que contienen soporte para la coma como un separador decimal. El contenido del archivo debe ser algo como esto:

$.validator.methods.range = function (value, element, param) { 
    var globalizedValue = value.replace(",", "."); 
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); 
} 

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); 
} 
+0

¿Hay alguna forma adecuada de hacerlo? –

+0

Quiero decir, ¿qué pasa con el manejo de diferentes valores decimales en diferentes culturas? Por supuesto, solo quiero almacenar los valores en una cultura, pero quiero dar al visitante de la página web la oportunidad de poner y validar valores decimales en su cultura. –

Cuestiones relacionadas