0

在我的模型中,我有一个以以下方式注释的特定字段:

    [DataType(System.ComponentModel.DataAnnotations.DataType.Text)]
    [RegularExpression("[0-9]{1,10}", ErrorMessage = "The stated Attempt Id is invalid!")]
    public long? AttemptId { get; set; }

当我在尝试 ID 中输入不正确的数据时,它会在模型​​状态中给我以下错误消息:

The value 'cbcbxcb' is not valid for AttemptId.

我还有其他带有类似错误消息的字段,但它们的类型是字符串而不是长?并且在给出无效值的情况下会显示正确的错误消息。为什么不是“长”的消息?正在使用?我正在使用页面中的以下文字标签显示我的错误。

<%: Html.TValidationSummary() %>

编辑:我试图将模型中的验证更改为以下内容:

    [Required(ErrorMessage="The stated Attempt Id is invalid!", AllowEmptyStrings=true)]

然而,这仍然是不正确的。首先,我需要让该字段留空,当我这样做时,它会给我“声明的尝试 ID 无效!” 错误信息。其次,当我在字段中输入无效数据时,它会恢复到原来的错误消息。

4

3 回答 3

1

这可能是因为 MVC 绑定甚至无法将输入值转换为正确的类型,因此它已经知道该值必须是无效的。

于 2012-04-24T10:34:35.617 回答
1

RegularExpression 验证属性仅适用于字符串类型。要获取自定义错误消息,请改用 Required 验证属性并放入您自己的自定义错误消息。

如果您的模型参数不是强制性的,您可以在控制器中执行验证并使用 ModelState.AddModelError 方法添加您自己的自定义消息 - 不过,这有点小技巧。

于 2012-04-24T10:49:03.503 回答
1

您应该使用 FluentValidation

使用属性的内置验证东西是脆弱和讨厌的——至少可以这么说。

于 2012-04-24T11:34:22.780 回答