2010-01-18 2 views
8

Новая проверка входных данных Asp.net mvc 2.0 работает как шарм, за исключением десятичных разделителей, когда дело доходит до jquery.validate. Когда я использую Microsoft MVC ajax libs, он отлично работает. Запятая - это сторона сервера десятичного разделителя, а также клиентская сторона.jQuery проверять десятичный разделитель и 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> 

При использовании этого (JQuery загружен в мастер зрения), я должен использовать точку на стороне клиента. Но тогда модель недействительна и возвращается к представлению, создавая интересный цикл.

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

Я предпочел бы использовать JQuery для всех моих потребностей яваскрипта, есть ли способ сделать jquery.validate использовать запятую, а не точку? Я занимался поиском в Google и читал документы, но довольно странно, что я не мог найти многого в этом вопросе, который, по вашему мнению, был бы общим.

+0

Я думаю, что это хороший способ, чтобы отправить эту проблему на блоге ScottGu тоже. Он опубликовал пару дней назад о проверке и быстро отвечает в первые дни публикации. –

ответ

2

Ahhh ... Радости глобализации!

При работе с номером (и я даже не начинаю вводить даты) необходимость определения правильного десятичного разделителя может быть сложной. Тем не менее, существует простой способ определения десятичного разделителя для любого клиента:

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

Таким образом, вы всегда будете знать, что десятичный разделитель на клиенте, и есть проверка выполняется соответственно.

+4

Хорошо, спасибо. Но как мне получить jquery.validate для использования этого разделителя? И что, если это точка, а серверная часть MVC ожидает запятую? Это очень запутывает;). – Morph

1

Возможно, вы найдете ответ в additional-methods.js. Вы найдете пример локализации даты: найдите <input name="pippo" class="{dateITA:true}" /> и jQuery.validator.addMethod("dateITA",, который следует. Вы можете сделать то же самое, чтобы добавить и использовать свою выборочную проверку номеров (соответствует используемой вами локали).

0

Вы можете добавить запятую к обычному expresion рядом с точкой в файле jquery.validate.min.js или jquery.validate.js. В следующем примере это знак жирным шрифтом. (\ -. [. \]>)

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

тщательно этот оригинальный exppresion принять число с разделителем тысяч (,). Будет лучше, используйте RE без разделителя тысяч, если вы хотите использовать запятая десятичный разделитель.

0

Одним из решений является патч jquery validate, хотя вы не должны редактировать файл напрямую, как предложил Петр, поскольку эти модификации будут перезаписаны, если вы когда-либо обновляетесь дальше по дороге. Вот лучшее решение: http://rebuildall.umbraworks.net/2011/03/02/jQuery_validate_and_the_comma_decimal_separator

Как быстро исправить можно отключить проверку клиента, локально или глобально, как описано здесь: http://www.campusmvp.net/asp-net-mvc-3-and-the-coma-in-decimals/

Смежные вопросы