2010-02-01 35 views

回答

8

寫新帖,因爲我需要更多的格式比評論提供。

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 

首先是被dervided類正確使用的格式化消息,第二個 - 當我們設置錯誤消息槽ErrorMessage屬性的情況,以及第三 - 當使用資源字符串時。 根據您的情況,您可以使用ErrorMessageResourceName

其他方面讓我們來看看衍生構造,對於我們的例子,範圍屬性:

internal static string RangeAttribute_ValidationError 
{ 
    get 
    { 
     return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture); 
    } 
} 

所以,你可以創建不同的棕褐色的資源文件:

private RangeAttribute() 
    : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError)) 
{ 
} 

這裏RangeAttribute_ValidationError從資源加載默認文化和覆蓋消息,如下所示:

http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx

http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx

+0

非常感謝Veton。你提到的最後一部分我完全錯過了。 – 2010-02-09 11:52:04

+6

我無法理解資源文件應該如何命名(以及放置在何處)從DataAnnotations.dll覆蓋ResourceManager。 – wRAR 2010-03-17 15:03:03

6

您可以使用的ErrorMessage基類ValidationAttribute的財產所有DataAnnotations驗證。

例如:

[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")] 
public int id; 

也許這會幫助你。

+3

是的。但是有沒有辦法一次替換默認信息? – 2010-02-07 22:54:34

+1

@FitzchakYitzchaki你有沒有達到過? – 2016-07-11 13:52:22

相關問題