全局本地化验证

发布于 2024-10-25 05:39:57 字数 596 浏览 5 评论 0原文

我正在使用 System.ComponeneModel.DataAnnotations 属性,例如“Required”和“StringLength”。是否可以在全球范围内本地化其错误消息?

我知道我可以做到这一点

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]

,但是在我使用必需属性的任何地方都这样做简直是疯了。我也想避免这样的事情:(

public class LocalizedRequiredAttribute : RequiredAttribute {
    public LocalizedRequiredAttribute()
        : base() {
        ErrorMessageResourceName = "Required";
        ErrorMessageResourceType = typeof(Resources.Validation);
    }
}

但如果没有其他办法,我会解决这个问题)

I'm using System.ComponeneModel.DataAnnotations attributes such as Required and StringLength. Is it possible to localize its error messages globally?

I know I can do this

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]

But doing this everywhere I use required attribute would be just insane. Also I'd like to avoid stuff like:

public class LocalizedRequiredAttribute : RequiredAttribute {
    public LocalizedRequiredAttribute()
        : base() {
        ErrorMessageResourceName = "Required";
        ErrorMessageResourceType = typeof(Resources.Validation);
    }
}

(but if there isn't any other way, I'll settle for this)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

殤城〤 2024-11-01 05:39:57

据我所知,您需要自定义属性或指定 ErrorMessageResourceName 和 ErrorMessageResourceType 属性。还有另一种可能性详细说明

创建全局资源类
App_GlobalResources,并设置
DefaultModelBinder.ResourceClassKey 到
此类的名称(例如,
如果您制作了“Messages.resx”,则设置
ResourceClassKey 到“消息”)。

有两个字符串可以覆盖
在 MVC 2 中:

  • 字符串值
    在以下情况下使用“PropertyValueInvalid”:
    用户输入的数据不是
    与数据类型兼容(对于
    例如,输入“abc”
    整数字段)。默认消息
    因为这是:“值‘{0}’不是
    有效期为 {1}。”

  • 字符串值
    在以下情况下使用“PropertyValueRequired”:
    用户没有输入任何数据
    不可为空的字段(对于
    例如,整数字段)。这
    默认消息是:“一个值
    是必需的。”

需要注意的是
在第二种情况下,如果你有

数据注释模型验证器提供者
在您的验证器提供商列表中
(默认情况下),那么你
永远不会看到第二条消息。
该提供商看到非可选字段
并添加隐含的[必需]
归因于他们,以便他们
消息将与其他消息保持一致
具有明确 [必填] 的字段
属性并确保您获得
客户端验证是否需要
字段。

AFAIK you need either a custom attribute or specify the ErrorMessageResourceName and ErrorMessageResourceType properties. There is another possibility detailed here:

Create a global resource class in
App_GlobalResources, and set
DefaultModelBinder.ResourceClassKey to
the name of this class (for example,
if you made "Messages.resx", then set
ResourceClassKey to "Messages").

There are two strings you can override
in MVC 2:

  • The string value for
    "PropertyValueInvalid" is used when
    the data the user entered isn't
    compatible with the data type (for
    example, typing in "abc" for an
    integer field). The default message
    for this is: "The value '{0}' is not
    valid for {1}."

  • The string value for
    "PropertyValueRequired" is used when
    the user did not enter any data for a
    field which is not nullable (for
    example, an integer field). The
    default message for this is: "A value
    is required."

It's important to note
in the second case that, if you have
the
DataAnnotationsModelValidatorProvider
in your validator providers list
(which it is by default), then you
will never see this second message.
This provider sees non-optional fields
and adds an implied [Required]
attribute to them so that their
messages will be consistent with other
fields with explicit [Required]
attributes and to ensure that you get
client-side validation for required
fields.

那些过往 2024-11-01 05:39:57

对于 MVC3,请参阅 DataAnnotationsResources。它是“RequiredAttribute_ValidationError”等等。
您可以通过安装.NET Framework语言包来解决该问题。

参见

For MVC3 see DataAnnotationsResources. It's "RequiredAttribute_ValidationError" and more.
You may solve it by installing .NET Framework language pack(s).

See also

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文