【问题标题】:localizing asp.net mvc annotation本地化 asp.net mvc 注释
【发布时间】:2013-02-08 16:09:49
【问题描述】:

我可以在 asp.net mvc 中本地化大部分数据注释。但是,对于其中一些我不能。例如看这个:

public class TestModel {
    [Required(ErrorMessageResourceName="MyFloat",ErrorMessageResourceType=typeof(MyResource))]
    [Display(Name = "MyFloat", ResourceType = typeof(MyResource))]
    public float MyFloat { get; set; }
}

如您所见,我可以本地化 Required 和 Display 属性。但是,如果最终用户在字段中键入一个字符串,验证器会抛出一条错误消息:

字段 MyFloat 必须是数字。

我搜索了所有属性以找到一个属性来更改此消息,但我找不到。请问你有什么想法吗?提前致谢。

【问题讨论】:

标签: asp.net-mvc localization data-annotations


【解决方案1】:

我发现添加这个数据注释更容易:

 [RegularExpression(@"^[0-9]+$", ErrorMessageResourceName="MyFloat",ErrorMessageResourceType=typeof(MyResource))]

它在客户端工作

【讨论】:

    【解决方案2】:

    您可以尝试使用Range 属性:

    [Range(float.MinValue, float.MaxValue, ErrorMessageResourceName = "IncorrectFloat", ErrorMessageResourceType=typeof(Resources))]
    public float MyFloat { get; set; }
    

    【讨论】:

      【解决方案3】:

      如果您担心的是客户端,只需将其添加到 jquery.validate.js 文件的末尾或单独的 javascript 文件中并在之后立即引用它:

      jQuery.extend(jQuery.validator.messages, {
        required: "Este campo es obligatorio.",
        remote: "Por favor, llenar este campo.",
        email: "Debe escribir una dirección de correo válida",
        url: "Debe escribir una dirección válida.",
        date: "Debe escribit una fecha válida.",
        dateISO: "Debe escribit una fecha (ISO) válida.",
        number: "Debe escribir un número válido.",
        digits: "Por favor, esribir sólo dígitos.",
        creditcard: "Debe escribir un número de tarjeta válido.",
        equalTo: "Por favor, escribir el mismo valor nuevamente.",
        accept: "Por favor, escribir un valor con una extensión aceptada.",
        maxlength: jQuery.validator.format("Por favor, no escribir más de {0} caracteres."),
        minlength: jQuery.validator.format("Por favor, no escribir menos de {0} caracteres."),
        rangelength: jQuery.validator.format("Por favor, escribir un valor entre {0} y {1} caracteres."),
        range: jQuery.validator.format("Por favor, escribir un valor entre {0} y {1}."),
        max: jQuery.validator.format("Por favor, escribir un valor menor o igual a {0}."),
        min: jQuery.validator.format("Por favor, escribir un valor mayor o igual a {0}.")
      });
      

      这应该本地化您的消息。

      【讨论】:

      • 注意:这是对 jquery.validate 本地化进行硬编码的最简单方法。对于具有多种可能本地化的项目,我有一个包含所有本地化 .js 文件(validate-es.js、validate-us.js 等)的文件夹,并决定从 BundleConfig 方法和网络上配置的语言环境中呈现哪个。配置
      【解决方案4】:

      这是一个事件顺序的问题。框架与您的自定义框架。

      您收到的默认消息深深地内置在框架中。它是一个字符串资源。默认模型绑定器在将字符串值绑定到双精度类型时添加它。这显然是在在您的自定义验证之前完成的,因此您首先会收到此默认错误消息。

      要改变这种行为,您可能需要编写一个自定义模型绑定器。 如何创建自定义模型绑定器的示例是here。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多