Dot-Net

DisplayAttribute:對 App_GlobalResources 中的資源沒有好處

  • March 23, 2011

這個問題確實適用於所有項目,但是我的展示環境是一個 MVC3 應用程序,因此該標籤。

我為我們的 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 Type Here $$’ 不是公共的或不包含名為 ’ 的公共靜態字元串屬性$$ Resource Name Here $$'.

當然,我在各個地方都使用本地化,並且在類庫中,這些資源通常會被標記為公共的。但是,在 Web 應用程序中,我將使用該App_GlobalResources文件夾,因為這就是它的用途!

這裡的問題是,為這個文件夾中的 resx 文件生成的資源訪問器總是作為內部訪問生成的,無法更改它。

因此,由於DisplayAttribute似乎只尋找公共成員(而我複制ValidationAttribute並應用於我自己的DisplayNameAttribute派生類型的本地化程式碼只是尋找具有公共或內部可見性的靜態成員),因此似乎DisplayAttribute任何 MVC 都禁止打算App_GlobalResources用於本地化字元串的網路應用程序?

除了這可能是一個錯誤之外DisplayAttribute,還有其他人遇到這個問題嗎?你做了什麼來解決它?我是否應該尊重使用DisplayAttribute並將所有資源更改為“正確”嵌入到類庫項目中,並將它們全部設置為公共?或者我應該放棄 DisplayAttribute 以支持我知道有效的其他類!?

您應該能夠更改訪問修飾符。在解決方案資源管理器中,點兩下您的 .resx 文件,然後在託管資源編輯器的右上角附近,將訪問修飾符下拉列表從Internal更改為Public

更新

這可能會奏效:公開全球資源

這篇文章解釋了更多關於在 MVC 應用程序中使用 App_GlobalResources 或 App_Localresources 的問題。

似乎沒有理由在 MVC 應用程序中使用 App_GlobalResources 或 App_Localresources ,最好不要使用它們以避免像您遇到的問題一樣。(根據前面的連結,您可能遇到的另一個問題是單元測試失敗。這是因為資源僅在 ASP.NET 執行時執行您的網站時可用)

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