2011-09-20 43 views
1

首先對於Microsoft MVC團隊感到抱歉,因爲本地化數據註釋驗證消息沒有簡單的解決方案。這花了我很多時間,最後沒有找到簡單的解決方案!本地化mvc 3.0驗證客戶端消息

我終於決定繼承RequiredAttribute做本地化。所以我這樣做了:

public class MyRequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute 
{ 
    public MyRequiredAttribute() 
     : base() 
    { 
     this.ErrorMessageResourceType = typeof(Resources.DataAnnotationDefaults); 
     this.ErrorMessageResourceName = "Required"; 
    } 
} 

其中我在DataAnnotationDefaults.resx文件中提供了我的本地化消息。 所以我可以用這個簡單的

 [MyRequired] 
    public int UnitCode { get; set; } 

但問題是:它不會在客戶端應用,只是在服務器端。爲什麼?我錯過了什麼?

令人驚訝的是,下面的行是好的,並在客戶端工作!

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(DataAnnotationDefaults))] 
public int UnitCode { get; set; } 

如果有人能幫助我,我會很高興和讚賞。

+0

將'Required'屬性放在非空值類型上幾乎沒有任何意義。像int這樣的值類型總是有一個默認值。你有嘗試過使用可空的整數嗎? –

+1

我編輯了你的帖子,請儘量保持它們的客觀性,不要咆哮。 – jgauffin

回答

2

您需要了解驗證在MVC和.NET中的工作原理。 DataAnnotation是一個通用的驗證庫,可用於各種應用程序,而不僅僅是MVC。

因此,MVC包含不同類型的MVC適配器,用於添加對DataAnnotations的支持。客戶端適配器專門針對在System.ComponentModel.DataAnnotations中定義的屬性制定。

因此,您需要創建自己的適配器以使其與您的派生屬性一起工作。我寫了一個關於它的blog entry

更簡單的方法是使用我的localized metadata provider

+0

owwwwww ......真的非常感謝......終於在數天後解決了我的問題!...我希望微軟提供這樣的文檔更多 –