#javascript #jquery #validation #asp.net-mvc-5 #jquery-globalize
#javascript #jquery #проверка #asp.net-mvc-5 #jquery-глобализация
Вопрос:
У меня очень простой сценарий:
В моей модели:
public Double MyNumber { get; set; }
(пока нет аннотаций)
На мой взгляд:
<input type="hidden" id="locale" value="@System.Threading.Thread.CurrentThread.CurrentUICulture"/>
@Html.LabelFor(model => model.MyNumber)
@Html.EditorFor(model => model.MyNumber)
@Html.ValidationMessageFor(model => model.MyNumber)
В моем коде javascript на той же странице:
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/cldr.js"></script>
<script src="/Scripts/cldr/event.js"></script>
<script src="/Scripts/cldr/supplemental.js"></script>
<script src="/Scripts/globalize.js"></script>
<script src="/Scripts/globalize/number.js"></script>
<script src="/Scripts/globalize/date.js"></script>
<script src="/Scripts/jquery.validate.globalize.js"></script>
<script>
$.when(
$.getJSON("/Scripts/cldr/supplemental/likelySubtags.json"),
$.getJSON("/Scripts/cldr/main/" $("#locale").val() "/numbers.json"),
$.getJSON("/Scripts/cldr/supplemental/numberingSystems.json"),
$.getJSON("/Scripts/cldr/main/" $("#locale").val() "/ca-gregorian.json"),
$.getJSON("/Scripts/cldr/main/" $("#locale").val() "/timeZoneNames.json"),
$.getJSON("/Scripts/cldr/supplemental/timeData.json"),
$.getJSON("/Scripts/cldr/supplemental/weekData.json")
).then(function () {
return [].slice.apply(arguments, [0]).map(function (result) {
return result[0];
});
}).then(Globalize.load).then(function () {
Globalize.locale($("#locale").val());
}).then(console.log("LOADED EVERYTHING"));
</script>
Я не получаю ошибок при загрузке страницы, поэтому я предполагаю, что инициализация глобализации прошла успешно
Теперь проблема (при использовании культуры nl-BE):
- Оба 1.23 и 1,23 принимаются при проверке на стороне клиента.
- В соответствии с культурой nl-BE следует принимать только 1,23.
- Проверка на стороне сервера (.NET) работает должным образом и отклоняет 1.23.
Нужно ли добавлять аннотации? Я предполагаю, что по умолчанию для базовой проверки аннотации не требуются.
Я делаю что-то не так с JQuery.Globalize
проверкой? (Я должен сказать, что версия 0.x была намного более простой в использовании. Эта версия 1.x с данными CLDR настолько сложна, когда вы не хотите использовать npm или bower, а только nuget)
Для ясности, это мои ожидания, но, возможно, я ожидаю слишком многого
- Пользователь может переключаться между разными культурами. Некоторые из этих культур ожидают 3,14 для PI, некоторые ожидают 3,14 для PI
- В культуре, где «.» является десятичным разделителем, я хочу, чтобы проверка на стороне клиента принимала только «3,14» и показывала ошибку при вводе «3,14».
- В культуре, где «,» является десятичным разделителем, я хочу, чтобы проверка на стороне клиента принимала только «3,14» и показывала ошибку при вводе «3,14».
- Таким образом, проверка на стороне клиента и сервера синхронизируется.
- Так или иначе, я ожидал jQuery.Глобализируйте, чтобы сделать это за меня.
- На данный момент проверка на стороне клиента принимает оба варианта, но проверка на стороне сервера принимает только правильный.
Как я могу это решить?
Комментарии:
1. Проблема здесь в том, что JavaScript не заботится о
.
или,
обозначении, если выparseInt()
задаете значение. Это работает. Возможно, вы захотите сделатьstring.replace()
там.2. Я не использую parseInt или любой другой явный код JavaScript для полей. Я ожидаю, что jQuery Globalize проверит поле «ненавязчивым» способом.
3. Вы его не используете, но я имел в виду, что JavaScript на самом деле не заботится о
,
or.
, он работает одинаково для интерпретатора.