Esta pregunta se aplica a todos los proyectos realmente, sin embargo, mi entorno de demostración es una aplicación MVC3, de ahí esa etiqueta.DisplayAttribute: No es bueno para recursos en App_GlobalResources
Escribí una clase de DisplayNameAttribute
-derivada para nuestros proyectos de MVC2, como tantas otras personas, así que pude localizar nombres para mostrar en los editores de MVC y mostrar plantillas. Levanté el código de localización ValidationAttribute
usado para el mensaje de error para que se comportara de una manera 'estándar'.
Entonces me di cuenta de que en MVC3 tenemos la DisplayAttribute
, así que obedientemente obsoleto mi clase de atributo en la versión .Net 4 de mi marco extensión MVC y cambiado las del modelo en mi proyecto actual para utilizar esto, por ejemplo:
[Display(ResourceType = typeof(Resources.MyResources), Name = "ResourceName")]
public string ModelProperty { get; set; }
Luego ejecutar la aplicación web y me sale un error similar al siguiente:
System.InvalidOperationException: no se puede recuperar la propiedad 'Nombre', porque la localización falló. Escriba '[Tipo de recurso aquí]' no es público o no contiene una propiedad pública de cadena estática con el nombre '[Nombre del recurso aquí]'.
Uso la localización en varios lugares, por supuesto, y en las bibliotecas de clase, dichos recursos se marcarán como públicos. En las aplicaciones web, sin embargo, usaré la carpeta App_GlobalResources
porque, bueno, ¡para eso sirve!
El problema aquí es que los descriptores de acceso de recursos que se generan para archivos resx en esta carpeta son siempre generado como el acceso interno, y no hay forma de cambiarlo.
lo tanto, ya DisplayAttribute
parece más que mirar para los miembros públicos (mientras que el código de localización copié de ValidationAttribute
y se aplica a mi propio tipo de DisplayNameAttribute
-deriving simplemente busca a miembros estáticos, ya sea con visibilidad pública o interna), parecería que DisplayAttribute
está fuera de los límites de cualquier aplicación web MVC que pretenda usar App_GlobalResources
para las cadenas localizadas?
Aparte del hecho de que esto es probablemente un error en DisplayAttribute
, ¿Alguien más ha solucionado este problema? ¿Qué hiciste para resolverlo? ¿Debo respetar el uso de DisplayAttribute
y cambiar todos mis recursos para que estén 'correctamente' integrados como en los proyectos de la biblioteca de clases, y configurarlos como públicos? ¿O debería abandonar DisplayAttribute a favor de mi otra clase que sé que funciona?
No importa mi respuesta. Me di cuenta de que el menú desplegable solo está habilitado para los recursos locales, no para los globales. Mis disculpas. –
hmmm ... sí veo, ¡funciona, pero huele a truco! –
Oh, sí, absolutamente. No tengo idea de por qué obligan a que los recursos globales sean internos. –