如何只允许文本框中的数字?

时间:2014-11-05 18:47:01

标签: c# html asp.net-mvc-5

我想只输入数字文本框

此类型="数字"不要在客户端阻止lettrs

@Html.TextBoxFor(m => m.kidsNumber, 
                      new { @class = "textBox1", 
                             @type = "number", 
                             @min = "1", 
                             @max = "30", 
                             @id = "kidsNumber"})

这不会阻止客户端和服务器端的信件

[Range(1, 30, ErrorMessage = "1-30")]
[RegularExpression("([0-3][0-9])", ErrorMessage = "1-30")]
public string kidsNumber { get; set; }

1 个答案:

答案 0 :(得分:3)

老实说,我不确定我理解你的问题。类型为“number”的输入将阻止除支持的浏览器中的数字之外的任何内容的输入。并非所有浏览器都支持较新的HTML5输入类型,而在那些不支持的情况下,该字段将回退到将接受任何字符的常规文本输入。当然,它并不会阻止人们使用浏览器开发人员工具等来代码,并将类型从数字更改为文本以允许任何字符。

如果你想要更多的控制权,你可以附加一个JavaScript事件处理程序来监听字段上的keydown之类的事件,然后正则表达式替换任何不是数字的东西,但当然,JavaScript可以被禁用或者其他方式被篡改。

实际上,防止非数字输入的最佳选择是将您的媒体资源类型从string更改为int。如果模型绑定器无法从发布的数据中解析数字,则该字段将设置为0(作为int的默认值),如果使其成为可为空的int(int?),则为null。无论哪种方式,您的Range属性的验证都会启动并向用户显示错误。