我刚通过mvc验证和针对int
的绑定遇到了奇怪的行为。我的模型如下:
class YourModel
{
...
[Range(0, int.MaxValue, ErrorMessage = "Invalid")]
public int Area { get; set; }
...
}
视图:
<div class="form-group">
<label class="control-label">Area (m<sup>2</sup>)</label>
<input asp-for="Area" class="form-control" />
<span asp-validation-for="Area"></span>
</div>
通过上述操作,输入很乐意接受输入,例如37.90
,但在表单提交时将0
(默认为int
)无声地输入。可怜的用户想知道为什么它不能保存,并且经过几次尝试,她开始对开发人员感到愤怒(在这种情况下,我是生气的)。
int
验证背后的逻辑是什么?
答案 0 :(得分:0)
输入的类型为小数,而Area属性的类型为int。当ModelBinder尝试将十进制输入'37 .90'转换为int时,它将失败并为Area属性分配0(int的默认值)。
根据您的范围验证规则,任何值都在0到int的最大值之间有效,这就是它满足验证规则(因为Area属性的值为0)并且不显示任何错误的原因。
您应该将模型类中Area属性的数据类型更改为两倍,并根据此调整范围验证器。