如何更改ASP.NET MVC中的int模型validation的ErrorMessage?

我有一个模型,其属性定义如下:

[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时,是否有可用于覆盖默认错误消息的属性?

是的,您可以使用数据注释扩展 ,将您的属性标记为:

 [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; } 

尝试添加

 [RegularExpression("\\d+", ErrorMessage = "some message here")] 

参考博客文章

很像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="...")]属性进行装饰。

我有同样的问题,这个解决方案解决了它:

  • 为项目创建App_GlobalResources文件夹(右键单击项目 – >添加 – >添加ASP.NET文件夹 – > App_GlobalResources)。
  • 在该文件夹中添加resx文件。 说MyNewResource.resx
  • 使用所需的消息格式添加资源键PropertyValueInvalid (例如,“内容{0}对于字段{1}无效”)。 如果您想更改PropertyValueRequired,也可以添加它。
  • 将代码DefaultModelBinder.ResourceClassKey = "MyNewResource"到您的Global.asax启动代码中。

from: 如何更改ASP.NET MVC中的默认validation错误消息?

试试这个:

 [DataType(DataType.Currency, ErrorMessage ="......")] public int YourProperty { get; set; } 

ErrorMessage对我来说不适用于Range-attribute。 我最终使用了RegularExpression属性。

代替:

 [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上找到其他范围的正则表达式模式