ASP.NET MVC 3 RC 2 проверка на стороне клиента с глобализацией - PullRequest
11 голосов
/ 17 декабря 2010

Моя цель - проверить вводимые пользователем данные на стороне клиента, в зависимости от их культуры.

У меня есть примитивная модель данных со следующей структурой:

public class User
{
 public int UserId { get; set; }

 [Required]
 [StringLength(20,MinimumLength=3)]
 public string Name { get; set; }

 [Required]
 public double Height { get; set; }
}

Кроме того, я хочу включить проверку на стороне клиента, проверяя, является ли это действительным номером.Поэтому я добавил следующие строки в раздел <head> моего _Layout.cshtml.

<script src="@Url.Content("~/Scripts/jQuery-1.4.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Поскольку я хочу иметь возможность проверять ввод в других языковых форматах (в данном конкретном контекстеЭто немецкий с форматом десятичных чисел 0,75, тогда как в США это будет 0.75), я добавил следующие строки ( Подключаемый модуль глобализации jQuery ) ПОСЛЕ ранее упомянутых jquery.validate.min.js и jquery.validate.unobtrusive.min.js.

<script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/jquery.glob.de-de.js")" type="text/javascript"></script>
<script type="text/javascript">
 $(document).ready(function () {
  $.culture = jQuery.cultures['de-DE'];
  $.preferCulture($.culture.name);
 });
</script>

Кроме того, я добавил следующую строку в раздел web.config в system.web, чтобы убедиться, что немецкая культура всегда выбрана:

<globalization culture="de-DE" uiCulture="de-DE" />

Теперь я испытываю следующее поведение:

  • Если я наберу 0,1 (обратите внимание на немецкое «правописание») в текстовое поле для значения «Высота», ошибка проверкипоявляется сообщение The field Height must be a number, и я не могу отправить форму.
  • Если я введу 0.1 (написание по-английски), я могу отправить форму, но проверка на стороне сервера возвращает следующеесообщение об ошибке проверкиThe value '0.1' is not valid for Height.

Итак, я нахожусь в каком-то тупике, где не могу выбраться.

Опять же, моя цель - проверить ввод десятичного числа на клиентеИ серверная часть, основанная на культуре пользователей (в этом случае она должна быть немецкой).Что я делаю не так?

Любая помощь высоко ценится!Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 28 декабря 2010

К сожалению, существует конфликт имен между функциями jQuery.validate.format и jQuery.Globalization.format. Поэтому вам придется изменить свой код, чтобы использовать плагин не-jquery Globalization.

Я только что написал в блоге об этом здесь .

Для вас это должно выглядеть так:

<script src="@Url.Content("~/Scripts/globalization.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globinfo/Globalization.de-DE.js")" type="text/javascript"></script>
<script type="text/javascript">
$.validator.methods.number = function (value, element) {
    if (!isNaN(Globalization.parseFloat(value))) {
        return true;
    }
    return false;
}
$(document).ready(function () {
    $.culture = jQuery.cultures['de-DE'];
    $.preferCulture($.culture.name);
    Globalization.preferCulture($.culture.name);
});
</script>

Этого должно быть достаточно.

1 голос
/ 17 декабря 2010

Мне пришлось отключить UnobtrusiveJavaScript.Страница больше не реагирует мгновенно, но по крайней мере она работает.

Вы можете отключить по умолчанию в Web.Config.

<appSettings>
    <add key="enableSimpleMembership" value="false"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="false"/>
 </appSettings>

И я использую сценарии Microsoft для проверки:1006 *

MicrosoftAjax.js
MicrosoftMvcAjax.js
MicrosoftMvcValidation.js

А также вещь jquery-1.4.4.min.js & jquery.glob, но я думаю, что я использую их внутренне.Проверка выполняется сценариями MS.

...