首页 > 解决方案 > 如果值超出类型边界,如何本地化值类型(ushort)属性的默认验证消息?

问题描述

我有一些网络表单,用户应该在其中输入端口号。当然,端口号的最佳类型是 ushort。我使用 RangeAttribute 来验证端口号和一些错误消息。

[Required(ErrorMessage = "The field is required")]
[Display(Name = "Port")]
[Range(1, ushort.MaxValue, ErrorMessage = "Invalid value")]
public ushort Port { get; set; }

只有当我输入 0 到 65535 之间的值时,本地化才能正确工作。所以只有一种不正确的情况 - 零值。但是,如果我尝试保存空值、输入负值或大于 65535 的值,我会完全收到另一条错误消息 ( The value '-1' is not valid for Port.),而且我不知道如何对其进行本地化。

有人可以帮我吗?

标签: c#asp.net-coredata-annotationsasp.net-core-localization

解决方案


“简单”的方法是使用short(或更大的签名类型)ushort,模型绑定过程发生在模型验证之后,因此,由于值 -1 与该过程不兼容,ushort该过程将停在那里,您的自定义错误将永远不会被读取。

困难的方法是编写自己的模型验证器:

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-2.2#custom-attributes


推荐阅读