【问题标题】:MVC5 StringLength validation failing on intMVC5 StringLength 验证在 int 上失败
【发布时间】:2016-12-18 23:59:16
【问题描述】:

我为 int 字段指定了以下验证。

[Required(ErrorMessage = ValidationMessages.ResponseRequired)]
        [Digits(ErrorMessage = ValidationMessages.DigitsOnly)]
        [StringLength(6, MinimumLength = 6, ErrorMessage = ValidationMessages.InvalidLength)]
        public int? Code { get; set; }

当我取出 StringLength 时,帖子就成功了。有了它,我得到 500 异常:

无法将“System.Int32”类型的对象转换为“System.String”类型

这里发生了什么?我需要为 int 写一个自定义的吗?在这种情况下,我只想确保用户输入 6 位数字。

【问题讨论】:

    标签: validation asp.net-mvc-5 data-annotations


    【解决方案1】:

    但是,字符串长度对于 int 不是真的有效吗?

    你想要达到什么目的?那输入大于99999?

    然后你可以使用:

    [Range(100000,int.MaxValue)]
    

    【讨论】:

    • 我们正在将代码发送给用户,它是 6 位长。我只想检查他们是否输入了 6 位数字。
    • 我已将其更改为正则表达式 [RegularExpression("^{6}$", ErrorMessage = ValidationMessages.InvalidLength)],但现在我的 ModelState.IsValid 又返回为 false。
    • 我一定没有抓住重点。如果你得到一个大于 99,999 的整数输入(如上面的代码所强制),那么你至少有 6 位数字。您可以随时将其更改为 Range(100000,999990) 以确保精确到 6 位......
    • hmmm...从没想过这样的事情可以在这里完成。谢谢。
    【解决方案2】:

    您可以使用 Range 或 RegularExpression 来控制您的数字长度。

    Range[0,999999]  
    Range[100000,999999]
    [RegularExpression(@"\d{6}")]
    

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 2016-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      相关资源
      最近更新 更多