MVC3:如何更改通用 [必需] 验证消息文本

本文关键字:必需 验证 消息 文本 何更改 MVC3 | 更新日期: 2023-09-27 18:32:08

当您使用 Required 属性修饰模型对象的属性并且未指定ErrorMessageResourceType/Name时,您会以"{0}字段是必需的"的插值形式收到验证消息,其中 param 0 是该属性的 DisplayName 属性的值。

我想

将该默认字符串更改为其他内容,但我想保留它的通用性质,也就是说,我不想为模型对象的每个属性指定ErrorMessageResourceType/Name。默认字符串存储在哪里以及如何更改它?

MVC3:如何更改通用 [必需] 验证消息文本

派生自己的属性是一个公平的选择,并且可能具有最低的开销来开始,但您需要返回并更改[Required]的所有现有用法。你(以及你团队中的任何其他人)也需要记住使用(并教新人使用)正确的方法。

另一种方法是替换ModelMetadataProvidersModelValidatorProviders从资源文件返回字符串。这避免了上述缺点。它还为替换其他属性(例如,MaxLengthAttribute)的消息和支持其他语言奠定了基础。

protected void Application_Start()
{
    var stringProvider = new ResourceStringProvider(Resources.LocalizedStrings.ResourceManager);
    ModelMetadataProviders.Current = new LocalizedModelMetadataProvider(stringProvider);
    ModelValidatorProviders.Providers.Clear();
    ModelValidatorProviders.Providers.Add(new LocalizedModelValidatorProvider(stringProvider));
}

以下是完整的源代码、文档和描述用法的博客文章。

您是否尝试过创建 RequiredAttribute 的派生类并重写 FormatErrorMessage 方法? 这应该有效:

public class MyRequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
    public override string FormatErrorMessage(string name)
    {
        return base.FormatErrorMessage(string.Format("This is my error for {0}", name));
    }
}