Dot-Net

如何替換標準 DataAnnotations 錯誤消息

  • December 16, 2019

我正在使用 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

引用自:https://stackoverflow.com/questions/2176663