我的类中有一个 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.
而不是“无效号码”消息。
有什么想法吗?
<小时/>我已经放了
[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)器中排除该值,这样就不会导致错误(但您必须绑定(bind)它并自己检查)
[Bind(Exclude="MyNumber")]
3 - 将其设为模型上的字符串,然后使用 TryParse 对其进行测试并添加您自己的自定义模型错误(这是一种合理的做法,并提醒我们所有人为什么使用 View 模型而不是域对象!)
if (!Int32.TryParse("MyNumber", out myInteger)) {
ModelState.AddModelError("MyNumber", "That isn't a number!");
}
实际上有很多解决方案,但我建议现在使用选项 3。
关于c# - asp.net mvc int 属性绑定(bind)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451255/