El sistema de validaciones integrado en ASP.NET MVC 2, basado en la especificación de restricciones utilizando los atributos definidos en el espacio de nombres System.ComponentModel.DataAnnotations
, permiten la introducción de mensajes de error personalizados, como en el siguiente ejemplo:
[Range(100, 230, ErrorMessage="La altura debe estar comprendida entre {1} y {2}")]
public double Height { get; set; }
[Required(
ErrorMessageResourceName="CampoObligatorio",
ErrorMessageResourceType = typeof(Resources.Mensajes))]
public string Name { get; set; }
Sin embargo, hay dos tipos de errores de validación en los que no es tan obvia la forma de indicar el texto del mensaje, debido a que no se generan por restricciones especificadas en atributos, sino basados en el tipo de la propiedad.
Por ejemplo, supongamos el siguiente código, perteneciente a una entidad de datos:
public class Entidad
{
public DateTime Fecha { get; set; }
public int Numero { get; set; }
}
DateTime
e int
, respectivamente.
La siguiente captura de pantalla muestra un formulario de edición de la entidad en los que se han producido estos errores de validación:
Propiedades implícitamente obligatorias
[Required]
sin especificar ningún mensaje de validación.
Para modificarlo basta decorar la propiedad con dicho atributo y especificar en él el contenido del mensaje, o la forma de localizar el texto en los recursos de la aplicación, de la misma forma que haríamos con un tipo referencia, como un string
.
public class Entidad
{
[Required(ErrorMessage = "Campo obligatorio")]
public DateTime Fecha { get; set; }
[Required(ErrorMessage = "Campo obligatorio")]
public int Numero { get; set; }
}
public class Entidad
{
[Requerido]
public DateTime Fecha { get; set; }
[Requerido]
public int Numero { get; set; }
}
public class RequeridoAttribute : RequiredAttribute
{
public RequeridoAttribute()
{
this.ErrorMessage = "Campo obligatorio";
}
}
¿Problemas con el cambio de tipo?
Para sustituir el mensaje por defecto es necesario utilizar un archivo de recursos en el que tendremos que introducir el texto que queramos utilizar en estos casos. Para ello, añadiremos en primer lugar una carpeta de recursos globales:
Y en su interior un archivo de recursos, llamado por ejemplo Mensajes.resx, en el que introducimos un string con el nombre PropertyValueInvalid
, cuyo valor será el mensaje de error que queremos mostrar cuando se produzca un error de conversión:
Observad que el interior del mensaje {0} será sustituido por el valor incorrecto, y {1} por la descripción de la propiedad que está generando el error.
El último paso para que ASP.NET MVC framework reconozca dónde debe buscar este recurso es indicar en la inicialización de la aplicación el nombre del archivo (o clase) que lo contiene:
protected void Application_Start()
{
... // Otras inicializaciones
DefaultModelBinder.ResourceClassKey = "Mensajes";
}
Tras aplicar estos cambios, si ejecutamos la aplicación podremos comprobar que hemos conseguido nuestros objetivos:
Publicado originalmente en: Modificar los mensajes de validación por defecto en ASP.NET MVC 2
Hey, ¡estoy en Twitter!