输入数字正在验证,但无提示地不绑定

时间:2018-10-11 19:59:35

标签: asp.net-core-mvc asp.net-core-2.1

我刚通过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验证背后的逻辑是什么?

1 个答案:

答案 0 :(得分:0)

输入的类型为小数,而Area属性的类型为int。当ModelBinder尝试将十进制输入'37 .90'转换为int时,它将失败并为Area属性分配0(int的默认值)。

根据您的范围验证规则,任何值都在0到int的最大值之间有效,这就是它满足验证规则(因为Area属性的值为0)并且不显示任何错误的原因。

您应该将模型类中Area属性的数据类型更改为两倍,并根据此调整范围验证器。