繁体   English   中英

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

[英]MVC3: How to change the generic [Required] validation message text?

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

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

您是否尝试过创建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));
    }
}

派生您自己的属性是一个公平的选择,并且开始时可能具有最低的开销,但您需要返回并更改[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));
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM