2013-10-24 2 views
0

Я использую MVC 4, EF и .NET 4.0.Оценка десятичной валидации

У меня есть модель со следующим полем:

[Display(Name = "Price")] 
[Required(ErrorMessage = "Required")] 
[Range(0,100)] 
public decimal Price{ get; set; } 

Я отобразить его в текстовом поле, на мой взгляд:

@Html.TextBoxFor(s => s.Price) 
@Html.ValidationMessageFor(s => s.Price) 

Если я типа 0.3 в текстовое поле Цена, проверка проходит. Однако, если я ввожу .3 (или любое число, начинающееся с десятичного числа), проверка на стороне клиента терпит неудачу, и ошибка «Поле Цена должно быть числом». отображается.

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

ответ

0

Я считаю, обновление JQuery до последней версии, как Джейми Диксон предложил бы решить эту проблему. Тем не менее, я не могу обновить jQuery в своем приложении в это время.

В качестве работы я добавил функцию Javascript, которая добавляет предыдущий нуль к любому числу, начинающемуся с десятичной.

$(document).ready(function() { 

    $('#Price').keydown(function() { 
     FixDecimal($('#Price')) 
    }); 

    function FixDecimal(obj) { 
     var val = obj.val(); 
     val = val.replace('$', ''); 
     if (val.indexOf('.', 0) == 0) val = '0' + val; 

     obj.val(val); 
    } 
    }); 
1

Если вы хотите сохранить такое значение в decimal, вам необходимо использовать суффикс M, чтобы создать литерал десятичного типа.

decimal d = .3; // Won't compile

decimal d = .3M; // Will compile

Это потому, что .3 не decimal, это double. Ниже будет компилировать, не требуя какой-либо суффикс:

double dbl = .3;

+0

Я изменил поле на 'public double Price {get; задавать; } ', и у меня все еще такая же проблема. – burntmarshmallows

+0

Какая проверка на стороне клиента вы используете? –

+0

Я считаю, что встроено в MVC. Не использовать ничего дополнительного. – burntmarshmallows

Смежные вопросы