如何更改 ASP.NET MVC 中 int 模型验证的 ErrorMessage?
Posted
技术标签:
【中文标题】如何更改 ASP.NET MVC 中 int 模型验证的 ErrorMessage?【英文标题】:How to change the ErrorMessage for int model validation in ASP.NET MVC? 【发布时间】:2011-09-29 02:11:09 【问题描述】:我有一个模型,其属性定义如下:
[Required(ErrorMessage="Please enter how many Stream Entries are displayed per page.")]
[Range(0,250, ErrorMessage="Please enter a number between 0 and 250.")]
[Column]
public int StreamEntriesPerPage get; set;
除非用户输入“100q”之类的内容,否则此方法有效。然后显示一个相当丑陋的错误,显示“值 '100q' 对 StreamEntriesPerPage 无效。”
当输入不是 int 时,我可以使用一个属性来覆盖默认错误消息吗?
【问题讨论】:
【参考方案1】:是的,您可以使用Data annotations extensions,将您的属性标记如下:
[Required(ErrorMessage = "Please enter how many Stream Entries are displayed per page.")]
[Range(0, 250, ErrorMessage = "Please enter a number between 0 and 250.")]
[Column]
[DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]
public int StreamEntriesPerPage get; set;
【讨论】:
不喜欢使用第三方软件来做这么小的事情。 链接失效【参考方案2】:尝试添加
[RegularExpression("\\d+", ErrorMessage = "some message here")]
Reference blog post
【讨论】:
似乎不起作用,我仍然得到默认的错误文本。 似乎默认整数验证具有更高的优先级。【参考方案3】:很像 Feras 的建议,但没有外部依赖:
using System;
using System.ComponentModel.DataAnnotations;
namespace MyDataAnnotations
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class IntegerAttribute : DataTypeAttribute
public IntegerAttribute()
: base("integer")
public override string FormatErrorMessage(string name)
if (ErrorMessage == null && ErrorMessageResourceName == null)
ErrorMessage = "Enter an integer"; // default message
return base.FormatErrorMessage(name);
public override bool IsValid(object value)
if (value == null) return true;
int retNum;
return int.TryParse(Convert.ToString(value), out retNum);
然后您可以使用[Integer(ErrorMessage="...")]
属性进行装饰。
【讨论】:
这看起来很酷。您是否有任何资源可供我浏览以获取有关从DatatTypeAtribute
继承的信息?
这似乎没有任何作用。我创建了名称空间和具有覆盖的类。然后,我在模型类上使用了命名空间并添加了[Integer(ErrorMessage="Please enter a whole number.")]
。当我输入 '20d' 时,我仍然得到“值 '20d' 对 StreamEntriesPerPage 无效。”
如果我在模型中使用int
作为数据类型(value
的值始终为null
),它也对我不起作用。虽然如果我使用string
而不是int
,它会按预期工作,可能有什么问题?【参考方案4】:
我遇到了同样的问题,这个解决方案解决了它:
为您的项目创建App_GlobalResources
文件夹(右键单击项目 -> 添加 -> 添加 ASP.NET 文件夹 -> App_GlobalResources)。
在该文件夹中添加一个 resx 文件。说MyNewResource.resx
。
使用所需的消息格式添加资源键 PropertyValueInvalid
(例如,“内容 0 对字段 1 无效”)。如果您想更改 PropertyValueRequired 也可以添加它。
将代码 DefaultModelBinder.ResourceClassKey = "MyNewResource"
添加到您的 Global.asax 启动代码中。
来自: How to change default validation error message in ASP.NET MVC?
【讨论】:
【参考方案5】:试试这个:
[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty get; set;
【讨论】:
这对我不起作用。仍然收到 Out of box 错误消息“Not a valid number”【参考方案6】:ErrorMessage 不适用于我的范围属性。我最终使用了正则表达式属性。
代替:
[Range(0, 9, ErrorMessage = "...")]
public int SomeProperty get; set;
我用过:
[RegularExpression("^[0-9]$", ErrorMessage = "..."]
public int SomeProperty get; set;
您可以在以下位置找到其他范围等的正则表达式模式:https://www.regular-expressions.info/numericranges.html
【讨论】:
你错过了一个结束)。以上是关于如何更改 ASP.NET MVC 中 int 模型验证的 ErrorMessage?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ASP.NET 核心 mvc 向 asp.net 核心中的 Web API 发出 PUT 请求?