Проверка на стороне клиента ASP.NET MVC 3 RC 2 с глобализацией
Моя цель - проверить ввод пользователя на стороне клиента, в зависимости от культуры пользователей.
У меня есть примитивная модель данных со следующей структурой:
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 Plugin для глобализации) ПОСЛЕ вышеупомянутых 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.
Итак, теперь я нахожусь в каком-то мертвом замке, где я не могу выбраться.
Опять же, моя цель - проверить ввод десятичного числа на стороне клиента и сервера, исходя из культуры пользователей (в этом случае он был вынужден быть немецким). Что я делаю неправильно?
Любая помощь очень ценится! Заранее благодарю вас!
Ответы
Ответ 1
К сожалению, существует конфликт имен между функциями jQuery.validate.format и jQuery.Globalization.format. Поэтому вам придется изменить свой код, чтобы использовать плагин глобализации без jquery.
Я только что написал сообщение в блоге об этом здесь.
Для вас это должно выглядеть так:
<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>
Этого должно быть достаточно.
Ответ 2
Мне пришлось отключить UnobtrusiveJavaScript. Страница не реагирует мгновенно, но, по крайней мере, она работает.
Вы можете отключить по умолчанию в Web.Config.
<appSettings>
<add key="enableSimpleMembership" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="false"/>
</appSettings>
И я использую сценарии Microsoft для проверки:
MicrosoftAjax.js
MicrosoftMvcAjax.js
MicrosoftMvcValidation.js
А также jquery-1.4.4.min.js и jquery.glob, но я думаю, что я использую их внутренне. Проверка выполняется с помощью сценариев MS.