這個問題實際上適用於所有項目,但是我的演示環境是MVC3應用程序,因此該標記。DisplayAttribute:對App_GlobalResources中的資源沒有好處
我爲我們的MVC2項目編寫了一個DisplayNameAttribute
派生類,就像很多人一樣,所以我可以在MVC編輯器和顯示模板中本地化顯示名稱。我解除了用於錯誤消息的ValidationAttribute
本地化代碼,以便它以「標準」方式運行。
然後,我注意到,在MVC3我們有DisplayAttribute
,所以我盡職盡責地廢棄我的屬性類在.NET 4的版本我的MVC擴展框架,並以我目前的項目中使用此,例如改變了模特屬性:
[Display(ResourceType = typeof(Resources.MyResources), Name = "ResourceName")]
public string ModelProperty { get; set; }
然後我運行Web應用程序,我得到類似這樣的錯誤:
System.InvalidOperationException:因本地化失敗無法檢索屬性「名稱」。類型'[資源類型在這裏]'不是公共的,或者不包含名稱爲'[Resource Name here]'的公共靜態字符串屬性。
我當然在各個地方使用本地化,而在類庫中這些資源通常會被標記爲公開。但是,在Web應用程序中,我將使用App_GlobalResources
文件夾,因爲,就是這樣!
的這裏的問題是,作爲此文件夾中的文件RESX生成的資源訪問器是作爲內部訪問所產生總是,沒有辦法改變它的。
所以,既然DisplayAttribute
似乎只是爲了尋求公衆成員(而本地化的代碼,我從ValidationAttribute
複製並應用到自己的DisplayNameAttribute
- 導出類型簡單地查找與公共或內部的知名度靜態成員),它會出現DisplayAttribute
是否打算對本地化字符串使用App_GlobalResources
的任何MVC網絡應用程序禁用?
除了這個事實,這是大概在DisplayAttribute
的一個錯誤,有其他人遇到這個問題嗎?你做了什麼來解決它?我是否應該尊重DisplayAttribute
的使用,並將所有資源更改爲「正確」嵌入到類庫項目中,並將它們全部設置爲公共?或者我應該拋棄DisplayAttribute而轉向我認識的其他課程!?
不知道我的答案。我只注意到只能爲本地資源啓用下拉菜單,而不是全局菜單。我很抱歉。 – 2011-03-09 15:41:48
嗯...是的,我看到了 - 它的工作原理,但它有點黑客! – 2011-03-09 17:20:33
哦,是的,絕對。我不知道爲什麼他們強調全球資源是內部的。 – 2011-03-09 18:21:21