【问题标题】:ASP.NET MVC - Default Range validation error message not being overriddenASP.NET MVC - 默认范围验证错误消息未被覆盖
【发布时间】:2026-02-17 12:55:01
【问题描述】:

假设我有一个这样的模型属性:

[Range(1, 31, ErrorMessage = "O dia de fechamento deve possuir valores entre 1 e 31")]
public int DataInicial { get; set; }

即使在注释上设置了自定义错误消息,当我输入类似“32”或更多信息请参见 @Html.TextBoxFor(model => model.DataInicial) 字段。

我知道this 帖子,但我认为如果您可以在注释级别设置自定义消息,它应该可以在不设置 App_GlobalResources 和 .resx 文件、设置第三方库或其他任何东西的情况下工作......我知道添加 .resx 文件并将所有这些验证字符串放在那里是“最佳实践”,但是...

那么,由于消息显示不正确,我可能错在哪里?

提前谢谢你。

【问题讨论】:

  • 您看到的错误信息是什么?
  • 客户端或服务器端验证?
  • 客户端验证(在 POST 表单之前发生的验证)。我得到“请输入一个小于或等于 31 的值”。当我在具有范围验证的表单字段中键入“32”时,如上所述。我需要在哪里更改才能自定义此消息?
  • 4 年后这仍然是一个问题。我看到此错误消息:请在 int 上输入一个大于或等于 1 的值并带有此装饰:[Range(1, 9999, ErrorMessage = "Attribute Number must be between 1 and 9999"] 检查我的页面我看到了这个: data-val-range="属性编号必须在 1 到 9999 之间" 所以不显眼的验证应该可以工作,但事实并非如此。有趣的是我也有这个验证: data-val-number="字段代码必须是一个数字." 然而,当我输入一个字母时,我仍然看到同样的错误:请输入一个大于或等于 1 的值

标签: c# asp.net-mvc asp.net-mvc-4 data-annotations rangevalidator


【解决方案1】:

我遇到了同样的问题并进行了一些实验。只是自己学习 MVC 并不太明显,但该解决方案看起来不错并且很有意义。问题归结为触发了哪个验证属性。

我发现ErrorMessage 特定于与之关联的验证。

一个简单的例子应该可以很清楚......

[Required(ErrorMessage="xxx may not be blank.")]
[Range(0.0,1000.0,ErrorMessage="The value entered must be 0 to 1000.00")]
public virtual double xxx ()  // snip...

如果为空,验证后您将得到“xxx 可能不是空白”。输入值但无效时,您应该会看到另一个错误“输入的值...”。

【讨论】:

  • 问题是关于自定义错误消息没有覆盖 Range 的默认错误消息。你的回答与这个问题无关。