asp.net mvc int 属性绑定异常

2024-03-03

我的类中有一个 int 属性,想要验证用户是否输入了字符串。 我如何使用数据注释来做到这一点? 当我传递非整数值时,我收到如下异常:

The value 'asdasd' is not valid for property.

例如使用此验证属性:

[Range(0, Int32.MaxValue, ErrorMessage="Invalid Number")]
public int? Number { get; set; }

并在使用该模型的字段中输入“aaa”,但出现以下消息的异常:

The value 'aaa' is not valid for Number.

而不是“号码无效”消息。

有任何想法吗?


I've put

[Range(0, Int32.MaxValue, ErrorMessage="Invalid Number")]
public int? Number { get; set; }

但我从异常中收到了这条消息

The value 'aaa' is not valid for Number.

这里有两个验证阶段。

在调用属性中设置的验证之前,框架首先尝试解析信息。

因此,这里有几个基于此代码的示例:

[Range(0, Int32.MaxValue, ErrorMessage="Invalid Number")]
public int? Number { get; set; }

我在框中什么也没输入...

“无效数字”(框架将创建一个空整数,您的验证规则失败)

我在框中输入“A”...

“值“A”对于 Number 无效。” (框架无法将“A”转换为可为 null 的 int,因此框架验证规则失败,并且未检查您的验证规则。

** 解决方案 **

1 - 使用默认消息,直到您使用 MVC 3 / .NET 4,这样可以更轻松地覆盖这些消息

2 - 从绑定器中排除该值,这样就不会导致错误(但您必须绑定它并自己检查)

[Bind(Exclude="MyNumber")]

3 - 将其设为模型上的字符串,然后使用 TryParse 对其进行测试并添加您自己的自定义模型错误(这是合理的做法,并提醒我们所有人为什么使用视图模型而不是域对象!)

if (!Int32.TryParse("MyNumber", out myInteger)) {
    ModelState.AddModelError("MyNumber", "That isn't a number!");
}

实际上有很多解决方案,但我建议现在使用选项 3。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net mvc int 属性绑定异常 的相关文章

随机推荐