Client-side Валидация double в ASP.NET MVC

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

 MVC Model Binder

Для того, чтобы с клиентской части все правильно биндилось, необходимо добавить специальные биндеры. Рассмотрим на примере double. Важно понимать, что double и double? - разные типы.

public class DoubleModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        return valueProviderResult == null ? base.BindModel(controllerContext, bindingContext) :
            valueProviderResult.AttemptedValue.GetDouble(0);
        // of course replace with your custom conversion logic
    }
}

Далее включаем его в Startup.cs: 

ModelBinders.Binders.Add(typeof(double), new DoubleModelBinder());

Валидация jQuery

Клиентская валидация производится силами jQuery. Здесь тоже нужна заплатка. А именно, заменим способ проверки числа в файле jquery.validate.js на 

// http://jqueryvalidation.org/number-method/
number: function (value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
},

На сегодня это находится примерно на 1150 строчке.

Комментарии

comments powered by Disqus