2010-12-17 79 views
1

我正在使用數據註釋來驗證我的類屬性。出現了將驗證錯誤消息存儲在外部文件中的要求,在外部文件中它們將在運行時從內存加載到內存中。我可以在外部文件中存儲數據註釋錯誤消息嗎?

我想我可以從XML文件加載錯誤消息的集合,然後設置ErrorMessage:= [StringVariableHere] ...但顯然這不起作用,因爲你需要使用一個常量值。

如果我將errormessages存儲在Resource.resx文件中,那麼這些錯誤消息將被編譯到項目中,並且無法在運行時加載 - 或者我錯了嗎?

有人可以告訴我一個解決方案嗎?

回答

2

您可以派生數據註釋屬性併爲消息提供自己的來源。

public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute 
{ 
    private string _displayName; 

    public RequiredAttribute() 
    { 
     ErrorMessageResourceName = "Validation_Required"; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     _displayName = validationContext.DisplayName; 
     return base.IsValid(value, validationContext); 
    } 

    public override string FormatErrorMessage(string name) 
    { 
     //LOOK HERE! ;) 
     var msg = GetTheTextHereFromYourSource(); 

     return string.Format(msg, _displayName); 
    } 
} 

我所描述的技術在我的博客(我的目標是獲得本地化錯誤消息,但概念是相同的):http://blog.gauffin.org/2010/11/simplified-localization-for-dataannotations/

+0

嗨jgauffin,這是完美的,看起來像exacly我需要什麼,除了有一件事......它只適用於.Net框架4.我應該在我原來的帖子中提到我限於使用3.5 ...我可以在代碼中更改哪些內容以使其工作?謝謝! – 2010-12-19 19:29:45

+0

應該在3.5中工作。你會得到什麼錯誤? – jgauffin 2010-12-19 19:54:42

+0

我收到「驗證上下文未定義」的錯誤... – 2010-12-21 11:28:54

相關問題