vista validaciones tutorial que net mvc modelo isvalid form entre ejemplo diferencias controlador asp c# asp.net-mvc asp.net-mvc-4 localization global-asax

c# - tutorial - validaciones asp.net mvc



Los mensajes de error personalizados no se traducen en ASP.NET MVC 4 (1)

Quiero traducir el mensaje de validación "El campo Fecha debe ser una fecha".

He agregado las siguientes claves en Application_Start () en Global.asax

ClientDataTypeModelValidatorProvider.ResourceClassKey = "ModelBinders"; DefaultModelBinder.ResourceClassKey = "ModelBinders";

Creé ModelBinders.resx, ModelBinders.nl.resx, ModelBinders.fr.resx en App_GlobalResources.

He agregado los siguientes recursos de cadena (o traducciones) en los archivos .resx:

Name Value ==== ===== FieldMustBeDate The field {0} must be a date. FieldMustBeNumeric The field {0} must be a number. PropertyValueInvalid The value ''{0}'' is not valid for {1}. PropertyValueRequired A value is required.

Cuando envíe una cadena para una fecha, recibiré la traducción de "FieldMustBeDate". Cuando envío una fecha no válida (por ejemplo, "01/01 / 201a") recibo el mensaje no traducido de "PropertyValueInvalid" que está definido en el valor predeterminado ModelBinders.resx, en lugar de la traducción ... ¿Cómo puedo mostrar la traducción correcta? para PropertyValueInvalid?


Explicaré cómo hago los mensajes específicos del cliente. Primero, en el modelo que configura el recurso:

[Required(ErrorMessageResourceType = typeof(Resources.ModelBinders), ErrorMessageResourceName = "Required")] [Display(Name = "UserName", ResourceType = typeof(Resources.ModelBinders))] public string UserName { get; set; }

En segundo lugar, en el controlador que sobreescribes la cultura del hilo, lo obtengo de una ruta, por ejemplo en el método Initialize:

protected override void Initialize(RequestContext requestContext) { string cultureInfo = requestContext.RouteData.GetRequiredString("cultureInfo"); System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(cultureInfo); System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(cultureInfo); base.Initialize(requestContext); }

Es importante que los recursos estén formateados correctamente: ModelBinders.resx, ModelBinders.es-ES.resx, ModelBinders.en-US.resx ... Y nada más, Me funciona bien. Espero que este enfoque te ayude.