我有一些网页表单,用户应该输入端口号。当然,最适合端口号的类型是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.),并且我不知道如何本地化它。
有人能帮我这个忙吗?
发布于 2019-05-29 09:13:09
“简单”的方法是使用short (或更大的带符号类型)而不是ushort,模型绑定过程在模型验证之后发生,因此,由于值-1与ushort不兼容,该过程将停止,您的自定义错误将永远不会被读取。
最难的方法是编写自己的模型验证器:
发布于 2019-05-29 12:18:41
尝试使用int和自定义验证属性,如
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");
}
}
}型号:
[Required(ErrorMessage = "The field is required")]
[Display(Name = "Port")]
[PortPolicy]
public int Port { get; set; }https://stackoverflow.com/questions/56349936
复制相似问题