Dot-Net
如何替換標準 DataAnnotations 錯誤消息
我正在使用 System.ComponontModel.DataAnnotations 來驗證我的模型對象。在不為每個屬性提供 ErrorMessage 屬性或對它們進行子類化的情況下,如何替換生成的消息標準屬性(Required 和 StringLength)?
寫新文章是因為我需要的格式比評論提供的更多。
查看ValidationAttribute - 驗證屬性的基類。
如果發生驗證錯誤,將通過方法創建錯誤消息:
public virtual string FormatErrorMessage(string name) { return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name }); }接下來看看ErrorMessageString屬性:
protected string ErrorMessageString { get { if (this._resourceModeAccessorIncomplete) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0])); } return this.ResourceAccessor(); } }可以從以下位置設置屬性ResourceAccessor :
ValidationAttribute..ctor(Func<String>) ValidationAttribute.set_ErrorMessage(String) : Void ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void首先它被派生類準確地用於格式化消息,其次是我們通過ErrorMessage屬性設置錯誤消息的情況,第三是使用資源字元串的情況。根據您的情況,您可以使用ErrorMessageResourceName。
在其他地方,讓我們看看派生建構子,例如,範圍屬性:
private RangeAttribute() : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError)) { }這裡RangeAttribute_ValidationError是從資源中載入的:
internal static string RangeAttribute_ValidationError { get { return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture); } }因此,您可以為不同的 tan 預設文化創建資源文件並在那裡覆蓋消息,如下所示:
http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx
http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx