2010-02-01 8 views

Respuesta

8

Escribo una nueva publicación porque necesito más formateo del que proporcionan los comentarios.

Mirar ValidationAttribute - clase base de atributos de validación.

Si se produjo error de validación, el mensaje de error será creado por el método:

public virtual string FormatErrorMessage(string name) 
{ 
    return string.Format(CultureInfo.CurrentCulture, this.ErrorMessageString, new object[] { name }); 
} 

Siguiente vistazo a ErrorMessageString propiedad:

protected string ErrorMessageString 
{ 
    get 
    { 
     if (this._resourceModeAccessorIncomplete) 
     { 
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, DataAnnotationsResources.ValidationAttribute_NeedBothResourceTypeAndResourceName, new object[0])); 
     } 
     return this.ResourceAccessor(); 
    } 
} 

Propiedad ResourceAccessor pueden enchufar a partir de:

ValidationAttribute..ctor(Func<String>) 
ValidationAttribute.set_ErrorMessage(String) : Void 
ValidationAttribute.SetResourceAccessorByPropertyLookup() : Void 

Primero es utilizado exactamente por las clases dervidiadas para formatear mensajes, segundo - el caso cuando establecemos el mensaje de error a través de la propiedad ErrorMessage, y tercero - cuando se utilizan cadenas de recursos. Según su situación, puede usar ErrorMessageResourceName.

otra parte vamos a ver constructores derivados, para nuestro ejemplo, Atributo Rango:

private RangeAttribute() 
    : base((Func<string>) (() => DataAnnotationsResources.RangeAttribute_ValidationError)) 
{ 
} 

Aquí RangeAttribute_ValidationError se carga desde los recursos:

internal static string RangeAttribute_ValidationError 
{ 
    get 
    { 
     return ResourceManager.GetString("RangeAttribute_ValidationError", resourceCulture); 
    } 
} 

para que pueda crear el archivo de recursos de diferente color tostado cultura predeterminada y sobrescribir mensajes allí, como este:

http://www.codeproject.com/KB/aspnet/SatelliteAssemblies.aspx

http://msdn.microsoft.com/en-us/library/aa645513(VS.71).aspx

+0

Muchas gracias Veton. La última parte que has mencionado la he extrañado por completo. –

+6

No puedo entender cómo deben nombrarse los archivos de recursos (y dónde) para anular ResourceManager de DataAnnotations.dll. – wRAR

6

Puede utilizar ErrorMessage propiedad de clase base ValidationAttribute para todos los validadores DataAnnotations.

Por ejemplo:

[Range(0, 100, ErrorMessage = "Value for {0} must be between {1} and {2}")] 
public int id; 

Tal vez ayudará.

+3

verdadera. Pero, ¿hay alguna manera de reemplazar el mensaje predeterminado de una vez? –

+1

@FitzchakYitzchaki ¿Alguna vez lo lograste? –

Cuestiones relacionadas