自定义验证消息

时间:2012-12-26 17:58:51

标签: asp.net-mvc-3 validation custom-data-attribute

我在验证某些数据类型时遇到问题。 除了string之外,还有int,short,DateTime等。 假设我的视图模型类中有以下属性

public int? LineNumber { get; set; }

当我输入错误值时,我得到mvc错误“值'balblabl'对LineNumber无效。”

但是,如果我只想要“价值不正确”之类的话怎么办?或者,如果我想使用其他语言怎么办?我不知道该怎么做(当然我可以使用字符串而不是int,但这是一种痛苦的解决方法)

我已经尝试过dataannotationsextensions [DataAnnotationsExtensions.Integer(ErrorMessage = "Please enter a valid number.")]属性。它不起作用。我不能使用自定义验证属性,因为在粘合剂转换后,我在所有情况下都得到null值,值不正确。我只是不能做自己的验证。我可以写自己的活页夹,但它看起来像个笑话。真的我认为自定义验证消息是必须有featerus之一,我不能相信asp.net mvc没有一个简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

我想在我看来添加另一个添加和维护自定义错误消息的简单方法。 使用FluentValidation NuGet包。
它与mvc挂钩很容易看看here

您可以轻松为模型指定大量规则,并显示可以使用资源文件的自定义错误消息示例:

public class CreateProductCommandValidator : AbstractValidator<CreateProductCommand>
    {
        public CreateAgendaPointCommandValidator()
        {
            RuleFor(cmd => cmd.price)
                .NotEmpty()
                .WithMessage(Translations.CreateProduct_Price)

        }
    }
}

文档:FluentValidationDocumentation

答案 1 :(得分:0)

当默认模型绑定器无法将输入字符串解析为其目标类型时,这些错误会自动添加。它们与数据注释不同,您可以在其中指定资源而不是编码的字符串错误消息。

但是,您可以使用自己的资源文件,请参阅此other question。创建资源文件后,您将更新默认模型绑定器的global.asax以使用它:

DefaultModelBinder.ResourceClassKey = "MyResources";

在默认模型绑定器的属性ResourceClassKey中设置了自定义资源文件后,将根据以下条件(as per the MSDN)解析值:

  1. 如果未设置该属性,MVC将使用标准MVC资源。

  2. 如果属性设置为无效的类键(例如资源)     文件不存在),MVC抛出异常。

  3. 如果设置了属性且类密钥存在但资源不存在     文件中的名称在应用程序中不存在,MVC使用     标准的MVC资源。

  4. 如果设置了属性并且指定的资源可用,     MVC使用文件中的资源。

  5. 如果您需要知道特定消息check this的键值。对于消息值“{0}”对{1}无效。,您需要使用键DefaultModelBinder_ValueInvalid

    添加值