我想只输入数字文本框
此类型="数字"不要在客户端阻止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; }
答案 0 :(得分:3)
老实说,我不确定我理解你的问题。类型为“number”的输入将阻止除支持的浏览器中的数字之外的任何内容的输入。并非所有浏览器都支持较新的HTML5输入类型,而在那些不支持的情况下,该字段将回退到将接受任何字符的常规文本输入。当然,它并不会阻止人们使用浏览器开发人员工具等来代码,并将类型从数字更改为文本以允许任何字符。
如果你想要更多的控制权,你可以附加一个JavaScript事件处理程序来监听字段上的keydown之类的事件,然后正则表达式替换任何不是数字的东西,但当然,JavaScript可以被禁用或者其他方式被篡改。
实际上,防止非数字输入的最佳选择是将您的媒体资源类型从string
更改为int
。如果模型绑定器无法从发布的数据中解析数字,则该字段将设置为0(作为int的默认值),如果使其成为可为空的int(int?
),则为null。无论哪种方式,您的Range
属性的验证都会启动并向用户显示错误。