當您使用Required
屬性修飾模型對象的屬性並且未指定ErrorMessage
或ResourceType/Name
時,將以「需要{0}」字段的插值形式得到驗證消息。其中,param 0是該屬性的DisplayName
屬性。MVC3:如何更改通用[必需的]驗證消息文本?
我想將該默認字符串更改爲其他內容,但我想保留其一般性質,即我不想爲模型對象的每個屬性指定ErrorMessage
或ResourceType/Name
。默認字符串存儲在哪裏以及如何更改它?
當您使用Required
屬性修飾模型對象的屬性並且未指定ErrorMessage
或ResourceType/Name
時,將以「需要{0}」字段的插值形式得到驗證消息。其中,param 0是該屬性的DisplayName
屬性。MVC3:如何更改通用[必需的]驗證消息文本?
我想將該默認字符串更改爲其他內容,但我想保留其一般性質,即我不想爲模型對象的每個屬性指定ErrorMessage
或ResourceType/Name
。默認字符串存儲在哪裏以及如何更改它?
導出自己的屬性是一個公平的選項,以及可能具有最低的開銷上手,但你需要回去和改變的[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描述的使用。
您是否嘗試過創建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));
}
}
是的,但我應該閱讀'MyRequiredAttribute'構造函數中的'DisplayName'元數據屬性(而不是顯式傳遞它),因爲我已經有/需要DisplayName定義。 – 2012-04-25 14:11:01
根據以下鏈接,'name'參數是要包含在格式化消息中的名稱.http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.formaterrormessage。 ASPX – Joshua 2012-04-25 14:18:34