如何在ASP.NET MVC中更改int模型验证的ErrorMessage
本文关键字:int 模型 验证 ErrorMessage ASP NET MVC | 更新日期: 2023-09-27 18:01:21
我有一个模型,其属性定义如下:
[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启动代码中
发件人:如何更改ASP.NET MVC中的默认验证错误消息?
试试这个:
[DataType(DataType.Currency, ErrorMessage ="......")]
public int YourProperty { get; set; }
ErrorMessage无法使用Range属性。我最终使用了RegularExpression属性。
代替:
[Range(0, 9, ErrorMessage = "...")]
public int SomeProperty { get; set; }
我用过:
[RegularExpression("^[0-9]$", ErrorMessage = "..."]
public int SomeProperty { get; set; }
您可以在以下位置找到其他范围等的regexp模式:https://www.regular-expressions.info/numericranges.html
我想每个寻找这个问题答案的人都已经找到了,但我仍然会把解决方案留给新的寻求者。我对这个问题也做了一段时间的修正。我最终发现asp.net验证器使用了jQuery验证器。这就是为什么我创建了一个单独的JavaScript文件,在其中我编写了以下代码:
function SetNumberMessage() {
jQuery.extend(jQuery.validator.messages, {
number: "Значение должно быть числом!"
});
}
window.onload = SetNumberMessage;
我的目标是翻译验证消息,所以我覆盖了jQuery验证器中"number"的值。之后,在所需的Blazor页面中,我只需要引用如下JavaScript文件:
<script src = "~/js/SetNumberValidationScript.js"></script>
关于哪些值可以被覆盖的答案:jQuery验证:更改默认错误消息
我希望这能帮助到某人:(