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

时间:2011-07-05 19:26:04

标签: c# asp.net-mvc validation

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

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

6 个答案:

答案 0 :(得分:23)

是的,您可以使用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; }

答案 1 :(得分:9)

尝试添加

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

Reference blog post

答案 2 :(得分:8)

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

答案 3 :(得分:6)

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

  • 为您的项目创建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?

答案 4 :(得分:1)

试试这个:

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

答案 5 :(得分:0)

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

中找到其他范围等的正则表达式模式