Asp.net mvc ASP.NET MVC 4数字字段的活动验证

Asp.net mvc ASP.NET MVC 4数字字段的活动验证,asp.net-mvc,entity-framework,validation,asp.net-mvc-4,Asp.net Mvc,Entity Framework,Validation,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 公共类任务 公共属性TaskID为整数 公共财产估计

我有一个带注释的数据模型,如下所示:

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
公共类任务
公共属性TaskID为整数
公共财产估计小时数可为空(十进制)
末级
这将正确验证
估计小时数
字段,并在用户输入任何不在指定范围内的内容时显示错误消息。然而,我的问题是,这是被动验证。它允许用户输入“asdasfs2312”,然后点击提交

我想要的是主动验证,即完全阻止用户输入字母的输入字段。在ASP.NET中有没有一种简单的方法可以做到这一点?我在HTML5数字输入类型和jQueryUI微调器方面还没有任何运气

到目前为止,我找到的唯一解决办法是

编辑:
只是澄清一下,我有客户端和服务器端验证。我只是在寻找一种方法,以“输入时限制”的方式积极防止客户端输入,以减少用户提交表单然后接收错误消息所需的时间。

您必须在客户端的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;
}

问题是,如果用户出于某种原因禁用了javascript,它将允许所有字符。在这种情况下,您必须在ASP.NET中对表单发布功能进行服务器端检查,该功能在Chrome中运行得非常好,但在firefox中,您不能使用箭头键或删除。也不能添加小数点。谢谢你的帮助,我想我可能会暂时这样做,直到有其他东西击中我的脸。这里有一个诀窍,用上面的代码来找出你想要什么额外的键,就是用“alert(e.keyCode)”替换“return numoly(e)”。这样,您就可以将其添加到numOnly()函数中,使其返回true
$('#EstimatedHours').keypress(function(e) { 
    return numOnly(e); 
});