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

qua*_*els 29 c# validation asp.net-mvc

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

    [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; }
Run Code Online (Sandbox Code Playgroud)

除非用户输入类似"100q"的内容,否则此方法有效.然后会显示一个相当丑陋的错误,上面写着"值'100q'对StreamEntriesPerPage无效."

当输入不是int时,是否有可用于覆盖默认错误消息的属性?

小智 24

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

[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; }
Run Code Online (Sandbox Code Playgroud)

  • 不喜欢使用第三方软件来做这么小的事情. (31认同)
  • 链接已经死了 (4认同)

Bal*_*a R 9

尝试添加

[RegularExpression("\\d+", ErrorMessage = "some message here")]
Run Code Online (Sandbox Code Playgroud)

参考博客文章

  • 似乎没有用,我仍然得到默认的错误文本. (2认同)

Kie*_*one 9

很像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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用[Integer(ErrorMessage="...")]属性装饰.

  • 这似乎没有做任何事情.我创建了命名空间和带有覆盖的类.然后,我在我的模型类上使用了命名空间并添加了`[Integer(ErrorMessage ="请输入整数.")]`.当我输入'20d'时,我仍然得到"值'20d'对StreamEntriesPerPage无效." (6认同)

tar*_*arn 6

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

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

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