2013-12-12 3 views
1

У меня есть аннотированный модель данных, которая выглядит примерно так:ASP.NET MVC 4 Активная проверка для числовых полей

Public Class Task 
    Public Property TaskID As Integer 

    <Range(0, 999999999, ErrorMessage:="Please enter a valid number.")> 
    Public Property EstimatedHours As Nullable(Of Decimal) 
End Class 

Это правильно проверяет Estimated Hours поле и выводит сообщение об ошибке, если пользователь вводит что-либо, что не находится между указанным диапазоном. Моя проблема с этим, однако, заключается в том, что это ПАССИВНАЯ проверка. Он позволяет пользователям вводить «asdasfs2312», а затем нажать submit.

Что бы я хотел, это проверка ACTIVE, то есть поле ввода, которое полностью запрещает пользователю вводить буквы вообще. Есть простой способ сделать это в ASP.NET? Мне еще не повезло с типами ввода номера HTML5 и jQuery UI spinners.

Пока единственным решением, которое я нашел, является pretty hacky.

EDIT: Чтобы уточнить, у меня есть проверка на стороне клиента и сервера. Я просто ищу способ активно запретить вход на стороне клиента в режиме ограничения по мере ввода, чтобы сократить время, необходимое пользователю для отправки формы, и THEN получит сообщение об ошибке.

ответ

3

Вы должны сделать это в javascript, который является клиентской стороной. ASP.NET является серверной.

function numOnly(e) { 
    var key; var tf; 
    if (window.event) // IE 
     key = e.keyCode; 
    else if (e.which) // Firefox/Opera 
     key = e.which; 
    if ((key > 47 && key < 58) || (key == 8) || (e.keyCode > 36 && e.keyCode < 41) || (e.keyCode == 46) || (e.keyCode == 9)) return true; 
    else return false; 
} 

теперь, если вы используете JQuery, вы можете просто сделать это:

$('#EstimatedHours').keypress(function(e) { 
    return numOnly(e); 
}); 

Проблема с этим состоит в том, что если пользователь отключил Javascript по какой-то причине, это позволит все символы. Для ситуаций, подобных этому, вам нужно будет выполнить проверку на стороне сервера в вашей функции POST формы в ASP.NET.

+0

Хорошо работает в Chrome, но в firefox вы не можете использовать клавиши со стрелками или удалять. Также нельзя добавить десятичные точки. – ElliotSchmelliot

+0

ive отредактировал его, чтобы клавиши со стрелками и удалить. – jzm

+0

Спасибо за вашу помощь, я думаю, что я мог бы пойти по этому маршруту до тех пор, пока что-то еще не ударит меня по лицу. – ElliotSchmelliot

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