当您使用Required
属性修饰模型对象的属性并且未指定ErrorMessage
或ResourceType/Name
时,您将以“{0}字段的插值形式获取验证消息是必需的。“,其中param 0是该属性的DisplayName
属性的值。
我想将该默认字符串更改为其他字符串,但我想保留它的通用性质,即我不想为模型的每个属性指定ErrorMessage
或ResourceType/Name
宾语。存储的默认字符串在哪里?如何更改它?
答案 0 :(得分:6)
您是否尝试过创建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));
}
}
答案 1 :(得分:6)
获取您自己的属性是一个公平的选择,并且开始时可能具有最低的开销,但您需要返回并更改[Required]
的所有现有用途。您(以及您团队中的任何其他人)也需要记住使用(并教导新手使用)正确的人。
另一种方法是替换ModelMetadataProviders
和ModelValidatorProviders
以从资源文件返回字符串。这避免了上述缺点。它还为替换其他属性的消息(例如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));
}
以下是完整的source,documentation和描述用法的blog post。