Ненавязчивая проверка для целых чисел с MVC3 и jQuery - PullRequest
2 голосов
/ 24 июня 2011

Ненавязчивая проверка не различает типы данных. Существует только проверка чисел, которую MVC добавляет ко всем числовым полям.

Это имеет нежелательный эффект 1.2345, являющийся действительным целым числом. Когда вы отправляете, связыватель MVC не может проанализировать значение. Поэтому вместо получения ошибки на стороне клиента вы получаете ее с сервера.

Каков наилучший способ решения этой проблемы? Существуют ли решения?

1 Ответ

5 голосов
/ 24 июня 2011

Хорошо, вот что я сделал.

Написал свой собственный EditorTemplate для Int32 (Views / Shared / EditorTemplates / Int32.cshtml):

@model int?           
@Html.TextBox("", Model.HasValue ? Model.Value.ToString() : "", new { data_val_integer = "Field must be an integer" }) 

Добавлен адаптер проверки (запустите это на $ (document) .ready:)

jQuery.validator.addMethod('integer',
    function (value, element, params) {
        return String.IsNullOrEmpty(value) || isInteger(value);
    });

jQuery.validator.unobtrusive.adapters.add("integer", [],
    function (options) {
        options.rules['integer'] = {};
        options.messages['integer'] = options.message;
    });

Написал функцию Javascript isInteger, которая выглядит следующим образом

function isInteger(value) {
    return parseInt(value, 10) == value;
}

Теперь целочисленные поля дают приятное сообщение «Поле должно быть целым числом», если вы вводите что-либо с десятичной точкой.

Будем рады услышать о лучшем способе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...