【问题标题】:Custom validation message自定义验证消息
【发布时间】:2012-12-12 05:29:30
【问题描述】:

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

public int? LineNumber { get; set; }

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    文档:FluentValidationDocumentation

    【讨论】:

      【解决方案2】:

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

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

      DefaultModelBinder.ResourceClassKey = "MyResources";
      

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-05-31
        • 2011-10-21
        • 2014-08-15
        • 1970-01-01
        • 2017-06-28
        • 2017-12-13
        • 2013-07-10
        相关资源
        最近更新 更多