2010-01-18 63 views
8

La nueva validación de la entrada Asp.net mvc 2.0 funciona como un amuleto, excepto para los separadores decimales cuando se trata de jquery.validate. Cuando uso Microsoft MVC ajax libs, funciona bien. La coma es el lado separador decimal del servidor, así como del lado del cliente.jQuery validar separador decimal y Asp.net MVC

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript" ></script> 
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript" ></script> 
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

Cuando utilizo este (jquery se carga en la vista principal), I tienen que utilizar un punto en el lado del cliente. Pero luego el modelo no es válido y se devuelve a la vista, creando un bucle interesante.

<script src="/Scripts/jquery.validate.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcJqueryValidation.js" type="text/javascript"></script> 

prefiero usar jQuery para todas mis necesidades de javascript, ¿hay alguna manera de hacer jquery.validate usar la coma, y ​​no el punto? He estado buscando en Google y leyendo los documentos, pero lo suficientemente extraño como para no poder encontrar mucho sobre este tema, lo cual uno pensaría que sería muy común.

+0

Creo que una buena forma de hacerlo es colocar este problema en el blog de ScottGu también. Él postet en la validación hace un par de días y es rápido para responder en los primeros días de la publicación. –

Respuesta

2

Ahhh ... ¡Las alegrías de la globalización!

Al tratar con el número (y ni siquiera voy a empezar con las fechas) la necesidad de determinar el separador decimal correcto puede ser desalentador. Sin embargo, hay una manera fácil de determinar el separador decimal para cualquier cliente:

function GetDecimalSeparator() 
{ 
    return (1/10).ToString().substring(1, 1); 
} 

De esta manera siempre va a saber lo que es el separador decimal en el cliente, y tener la validación realizada en consecuencia.

+4

Ok, gracias. ¿Pero cómo obtengo jquery.validate para usar este separador? ¿Y qué pasa si se trata de un punto y el lado del servidor MVC espera una coma? Esto se está volviendo muy confuso;). – Morph

1

Probablemente encontrará la respuesta en el additional-methods.js. Encontrará el ejemplo de localización de fecha: busque <input name="pippo" class="{dateITA:true}" /> y jQuery.validator.addMethod("dateITA", que sigue. Puede hacer lo mismo para agregar y usar su validación personalizada de números (corresponde a la configuración regional que utiliza).

0

Puede añadir una coma a la expresion regular de al lado del punto en los archivos o jquery.validate.min.js jquery.validate.js. En el siguiente ejemplo, se marca con una fuente en negrita. (\ -. [. \,]>)

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

ser cuidadosamente este exppresion originales aceptar número con separador de miles (,). Será mejor, use RE sin separador de mil si desea usar coma separador decimal.

0

Una solución es aplicar un parche a la validación de jquery, aunque no se debe editar el archivo directamente, como sugirió Petr, ya que estas modificaciones se sobrescribirán si alguna vez se actualizan más adelante. Aquí es una solución mejor: http://rebuildall.umbraworks.net/2011/03/02/jQuery_validate_and_the_comma_decimal_separator

como una solución rápida que podría desactivar la validación del cliente, ya sea local o globalmente como se describe aquí: http://www.campusmvp.net/asp-net-mvc-3-and-the-coma-in-decimals/