ASP.NET MVC 4对数字字段的主动验证

时间:2013-12-12 00:21:40

标签: 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

这会正确验证Estimated Hours字段,并在用户输入不在指定范围之间的任何内容时显示错误消息。然而,我的问题在于它是PASSIVE验证。它允许用户输入“asdasfs2312”,然后点击提交。

我想要的是ACTIVE验证,即完全阻止用户输入字母的输入字段。在ASP.NET中有一种简单的方法吗?我还没有使用HTML5数字输入类型和jQuery UI微调器。

到目前为止,我找到的唯一解决方案是pretty hacky

编辑: 为了澄清,我有客户端和服务器端验证。我只是想找到一种方法来主动阻止客户端输入以限制为您输入的方式减少用户提交表单所需的时间,然后收到错误消息。

1 个答案:

答案 0 :(得分: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,它将允许所有字符。对于这种情况,您必须对ASP.NET中的表单POST函数进行服务器端检查