当输入为0.00时,RegularStatepression验证在ModelState.IsValid处失败

时间:2016-06-20 15:31:27

标签: c# asp.net-mvc validation model-validation

我遇到与this question

类似的问题

我正在使用 MVC 。我在我的ViewModel中添加了一个正则表达式来强制用户输入一个带有1或2个小数位的数字。我认为我的正则表达式中一定有错误,但同样的声明在其他地方工作正常。

如果我输入0.00作为我的费率,当我提交表单时, ModelState.IsValid返回为false

[RegularExpression(@"^(\d+\.\d{1,2})$", ErrorMessage = "Please enter valid rate with 1 or 2 decimal places")]
public double DecimalRate { get; set; }
  • 如果我输入任何无效输入,它会按预期运行,显示 正确的错误消息,不让我保存页面
  • 如果我输入有效输入(0.00除外),它会正确保存。
  • 如果我完全删除正则表达式,则0.00被视为有效输入 妥善保存。

根据this question中的建议,我已通过在Visual Studio中的ModelState.IsValid设置调试并检查错误来验证此速率是否导致错误。

我预感它可能与 double 类型的属性有关?

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您的媒体资源的数据类型为double(不是string),因此它并不代表一系列字符。它代表一个数值。如果您的输入为0.00,那么它将代表值0,与正则表达式不匹配。我怀疑你也会遇到像3.00这样的数字相同的问题。

如果您需要用户的输入采用特定格式,请将字段更改为string,然后在需要将其转换为数字时使用Convert.ToDouble()