2010-03-17 14 views
6

Actualmente estoy tratando de encontrar la forma de localizar los mensajes de error generados por MVC. Permítanme usar la carpeta de modelo predeterminada como ejemplo, para poder explicar el problema.MVC Localización de la Carpeta de modelo predeterminada

Suponiendo que tengo un formulario, donde un usuario entra en su edad. El usuario ingresa "diez" en el formulario, pero en lugar de obtener el error esperado de

"La edad debe ser entre 18 y 25".

el mensaje

"El valor 'diez' no es válido para la edad."

aparece.

propiedad La edad de la entidad se define a continuación:

[Range(18, 25, ErrorMessageResourceType = typeof (Errors), 
     ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]  
    public int Age { get; set; } 

Después de algunas excavaciones, noto que este texto de error proviene de la System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalid en el archivo MvcResources.resx.

Ahora, ¿cómo se pueden crear versiones localizadas de este archivo?

como una solución, por ejemplo, debo descargar MVC fuente y añadir MvcResources.en_GB.resx, MvcResources.fr_FR.resx, MvcResources.es_ES.resx y MvcResources.de_DE.resx, y luego compilar mi propia versión de MVC.dll?

Pero no me gusta esta idea. ¿Alguien más conoce una mejor manera?

+0

Un buen blog sobre esto también es aquí: http://bradwilson.typepad.com/blog/2010/01/input- validation-vs-model-validation-in-aspnet-mvc.html –

Respuesta

5

Ver http://forums.asp.net/p/1512140/3608427.aspx, desplácese hacia abajo hasta la respuesta de Brad Wilson, cerca de la parte inferior de esa página (Sat, Jan 09 2010, 3:20 PM). Hay propiedades estáticas en DefaultModelBinder que puede configurar para localizar los mensajes de error genéricos.

La razón un mensaje de error genérico se utiliza en lugar de su mensaje [Rango] es que [Rango] proporciona un mensaje de error de validación , pero este caso en particular es una unión error. No hay absolutamente ninguna manera en que el framework pueda esperar convertir la cadena "diez" a Int32, por lo que no puede disparar el validador [Range]. Esto es lo que controla la clave "PropertyValueInvalid" mencionada en ese foro.

+0

Gracias, eso es exactamente lo que estoy buscando. –

+0

¿Las claves como "PropertyValueInvalid" están documentadas oficialmente en alguna parte? – Johnny5

0

has necesitado: IDataErrorInfo propiedad

Este artículo le ayudará

+0

Para la validación, utilizo Validación fluida. El problema aquí no es con la validación, creo? El problema es que el MVC, o en este caso el archivador de modelo predeterminado, no está localizando los mensajes de error cuando agrega su propio mensaje de error al diccionario ModelState.Error. Quiero utilizar exactamente el mismo comportamiento que el que proporciona el archivador de modelo predeterminado, pero quiero localizar esos mensajes de error en otros idiomas –

3

En MVC3 hacer lo siguiente para cambiar los mensajes predeterminados:

  1. agregar la carpeta App_GlobalResources a su sitio ASP.NET
  2. añadir un nuevo archivo de recursos, lo llaman f.ex. MyResources.resx
  3. añadir estas teclas
    • PropertyValueRequired: Se necesita un valor.
    • PropertyValueInvalid: El valor '{0}' no es válido para {1}.
  4. en Application_Start de global.asax.cs añada la línea DefaultModelBinder.ResourceClassKey = "MyResources";
Cuestiones relacionadas