gpt4 book ai didi

c# - asp.net mvc int 属性绑定(bind)异常

转载 作者:行者123 更新时间:2023-12-01 20:17:44 26 4
gpt4 key购买 nike

我的类中有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com