首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果value超出类型边界,如何本地化value-type (ushort)属性的默认验证消息?

如果value超出类型边界,如何本地化value-type (ushort)属性的默认验证消息?
EN

Stack Overflow用户
提问于 2019-05-29 04:55:30
回答 2查看 92关注 0票数 0

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

代码语言:javascript
复制
[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.),并且我不知道如何本地化它。

有人能帮我这个忙吗?

EN

回答 2

Stack Overflow用户

发布于 2019-05-29 09:13:09

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2019-05-29 12:18:41

尝试使用int和自定义验证属性,如

代码语言:javascript
复制
public class PortPolicy : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if ((int)value >= 1 && (int)value <= 65535)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult("Invalid value");
        }
    }
}

型号:

代码语言:javascript
复制
[Required(ErrorMessage = "The field is required")]
[Display(Name = "Port")]
[PortPolicy]
public int Port { get; set; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56349936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档