validator net mvc data asp annotation localization data-annotations asp.net-mvc-3

localization - data - shopping cart asp net mvc



¿Dónde está toda la lista de mensajes de error predeterminados para DataAnnotations en MVC 3? (2)

Si abre System.ComponentModel.DataAnnotations.dll con una herramienta como Reflector, puede abrir el recurso System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources y echar un vistazo.

También puede consultar la clase System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources que proporciona acceso a las cadenas de recursos.

Sin embargo, otra pregunta de localización de MVC ...

Estoy tratando de localizar una aplicación ASP.Net MVC 3 utilizando archivos de recursos localizados para mostrar textos en las vistas, tal como se recomienda.

El problema es, como es habitual, cuando intentamos localizar los mensajes de error predeterminados de las anotaciones de datos.

Sé que puede especificar el archivo de recursos y la clave en cada Atributo:

[Required( ErrorMessageResourceType = typeof(CustomResourceManager), ErrorMessageResourceName = "ResourceKey")] public string Username { get; set; }

e incluso, que es mejor y preferido, puede anular el mensaje predeterminado, como este: recurso predeterminado para anotaciones de datos en ASP.NET MVC , para que pueda dejar los atributos como:

[Required] public string Username { get; set; }

Este último enfoque es el que estaba siguiendo, y funciona, pero solo cuando la Anotación de datos que desea sobrescribir tiene UNO y SOLO UN mensaje de error, ya que siempre busca una clave de recurso llamada igual que el atributo en el archivo de recursos personalizado (por ejemplo, "Requerido" necesita una entrada "RequiredAttribute" en el archivo de recursos)

Otros atributos, como StringLength, tienen más de un mensaje de error, dependiendo de los parámetros opcionales que use. Entonces, si tienes un modelo como:

public class Person { [Required] [StringLengthLocalizedAttribute(10, MinimumLength = 5)] [Display(Name = "User name")] public string UserName { get; set; } }

El mensaje de error es " El nombre de usuario del campo debe ser una cadena con una longitud mínima de 5 y una longitud máxima de 10 " .

Y si cambia el atributo StringLength a:

[StringLengthLocalizedAttribute(10)]

el mensaje de error cambia a " El campo Nombre de usuario debe ser una cadena con una longitud máxima de 10 " . Por lo tanto, en este caso, hay al menos 2 mensajes de error predeterminados para anular, y las soluciones dadas por @ kim-tranjan fallan.

Mi solución parcial a esto es implementar mi propio StringLength Attribute como este:

public class StringLengthLocalizedAttribute : StringLengthAttribute { public StringLengthLocalizedAttribute(int maximumLength) : base(maximumLength) { ErrorMessageResourceType = typeof(CustomValidationResource); } public override string FormatErrorMessage(string name) { ErrorMessageResourceName = MinimumLength > 0 ? "StringLengthAttributeMinMax" : "StringLengthAttributeMax"; return base.FormatErrorMessage(name); } }

Donde tengo un recurso localizado "CustomValidationResource" con los mensajes de validación, y lo configuro como ErrorMessageResourceType. Luego, anulando la función FormatErrorMessage, decido qué cadena de mensaje se debe aplicar dependiendo de los parámetros opcionales.

Entonces, la pregunta aquí es: ¿Alguien sabe dónde podemos encontrar la lista completa de las claves de recursos utilizadas por los Atributos de la Anotación de Datos y ver cuántos mensajes de error diferentes tenemos en cada uno sin probar todos y cada uno?

O mejor aún, ¿podemos tener el archivo RESX original para ver las plantillas de cadena y localizarlas con las mismas teclas de recursos? De esta forma, cambiar solo el ErrorMessageResourceType debería funcionar para todos los atributos de DataAnnotaciones, y no debería tener que adivinar dónde poner "{1}" o "{2}" en mi cadena localizada.

Gracias, Sergi


En caso de que aún esté buscando una descripción general de las cadenas de validación, a continuación puede encontrar los recursos de la clase System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources como mencionó Tz_:

[ArgumentIsNullOrWhitespace, The argument ''{0}'' cannot be null, empty or contain only white space.] [AssociatedMetadataTypeTypeDescriptor_MetadataTypeContainsUnknownProperties, The associated metadata type for type ''{0}'' contains the following unknown properties or fields: {1}. Please make sure that the names of these members match the names of the properties on the main type.] [AttributeStore_Type_Must_Be_Public, The type ''{0}'' must be public.] [AttributeStore_Unknown_Method, The type ''{0}'' does not contain a public method named ''{1}''.] [AttributeStore_Unknown_Property, The type ''{0}'' does not contain a public property named ''{1}''.] [Common_NullOrEmpty, Value cannot be null or empty.] [Common_PropertyNotFound, The property {0}.{1} could not be found.] [CompareAttribute_MustMatch, ''{0}'' and ''{1}'' do not match.] [CompareAttribute_UnknownProperty, Could not find a property named {0}.] [CreditCardAttribute_Invalid, The {0} field is not a valid credit card number.] [CustomValidationAttribute_Method_Must_Return_ValidationResult, The CustomValidationAttribute method ''{0}'' in type ''{1}'' must return System.ComponentModel.DataAnnotations.ValidationResult. Use System.ComponentModel.DataAnnotations.ValidationResult.Success to represent success.] [CustomValidationAttribute_Method_Not_Found, The CustomValidationAttribute method ''{0}'' does not exist in type ''{1}'' or is not public and static.] [CustomValidationAttribute_Method_Required, The CustomValidationAttribute.Method was not specified.] [CustomValidationAttribute_Method_Signature, The CustomValidationAttribute method ''{0}'' in type ''{1}'' must match the expected signature: public static ValidationResult {0}(object value, ValidationContext context). The value can be strongly typed. The ValidationContext parameter is optional.] [CustomValidationAttribute_Type_Conversion_Failed, Could not convert the value of type ''{0}'' to ''{1}'' as expected by method {2}.{3}.] [CustomValidationAttribute_Type_Must_Be_Public, The custom validation type ''{0}'' must be public.] [CustomValidationAttribute_ValidationError, {0} is not valid.] [CustomValidationAttribute_ValidatorType_Required, The CustomValidationAttribute.ValidatorType was not specified.] [DataTypeAttribute_EmptyDataTypeString, The custom DataType string cannot be null or empty.] [DisplayAttribute_PropertyNotSet, The {0} property has not been set. Use the {1} method to get the value.] [EmailAddressAttribute_Invalid, The {0} field is not a valid e-mail address.] [EnumDataTypeAttribute_TypeCannotBeNull, The type provided for EnumDataTypeAttribute cannot be null.] [EnumDataTypeAttribute_TypeNeedsToBeAnEnum, The type ''{0}'' needs to represent an enumeration type.] [FileExtensionsAttribute_Invalid, The {0} field only accepts files with the following extensions: {1}] [LocalizableString_LocalizationFailed, Cannot retrieve property ''{0}'' because localization failed. Type ''{1}'' is not public or does not contain a public static string property with the name ''{2}''.] [MaxLengthAttribute_InvalidMaxLength, MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length.] [MaxLengthAttribute_ValidationError, The field {0} must be a string or array type with a maximum length of ''{1}''.] [MetadataTypeAttribute_TypeCannotBeNull, MetadataClassType cannot be null.] [MinLengthAttribute_InvalidMinLength, MinLengthAttribute must have a Length value that is zero or greater.] [MinLengthAttribute_ValidationError, The field {0} must be a string or array type with a minimum length of ''{1}''.] [PhoneAttribute_Invalid, The {0} field is not a valid phone number.] [RangeAttribute_ArbitraryTypeNotIComparable, The type {0} must implement {1}.] [RangeAttribute_MinGreaterThanMax, The maximum value ''{0}'' must be greater than or equal to the minimum value ''{1}''.] [RangeAttribute_Must_Set_Min_And_Max, The minimum and maximum values must be set.] [RangeAttribute_Must_Set_Operand_Type, The OperandType must be set when strings are used for minimum and maximum values.] [RangeAttribute_ValidationError, The field {0} must be between {1} and {2}.] [RegexAttribute_ValidationError, The field {0} must match the regular expression ''{1}''.] [RegularExpressionAttribute_Empty_Pattern, The pattern must be set to a valid regular expression.] [RequiredAttribute_ValidationError, The {0} field is required.] [StringLengthAttribute_InvalidMaxLength, The maximum length must be a nonnegative integer.] [StringLengthAttribute_ValidationError, The field {0} must be a string with a maximum length of {1}.] [StringLengthAttribute_ValidationErrorIncludingMinimum, The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.] [UIHintImplementation_ControlParameterKeyIsNotAString, The key parameter at position {0} with value ''{1}'' is not a string. Every key control parameter must be a string.] [UIHintImplementation_ControlParameterKeyIsNull, The key parameter at position {0} is null. Every key control parameter must be a string.] [UIHintImplementation_ControlParameterKeyOccursMoreThanOnce, The key parameter at position {0} with value ''{1}'' occurs more than once.] [UIHintImplementation_NeedEvenNumberOfControlParameters, The number of control parameters must be even.] [UrlAttribute_Invalid, The {0} field is not a valid fully-qualified http, https, or ftp URL.] [ValidationAttribute_Cannot_Set_ErrorMessage_And_Resource, Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.] [ValidationAttribute_IsValid_NotImplemented, IsValid(object value) has not been implemented by this class. The preferred entry point is GetValidationResult() and classes should override IsValid(object value, ValidationContext context).] [ValidationAttribute_NeedBothResourceTypeAndResourceName, Both ErrorMessageResourceType and ErrorMessageResourceName need to be set on this attribute.] [ValidationAttribute_ResourcePropertyNotStringType, The property ''{0}'' on resource type ''{1}'' is not a string type.] [ValidationAttribute_ResourceTypeDoesNotHaveProperty, The resource type ''{0}'' does not have an accessible static property named ''{1}''.] [ValidationAttribute_ValidationError, The field {0} is invalid.] [ValidationContext_Must_Be_Method, The ValidationContext for the type ''{0}'', member name ''{1}'' must provide the MethodInfo.] [ValidationContextServiceContainer_ItemAlreadyExists, A service of type ''{0}'' already exists in the container.] [Validator_InstanceMustMatchValidationContextInstance, The instance provided must match the ObjectInstance on the ValidationContext supplied.] [Validator_Property_Value_Wrong_Type, The value for property ''{0}'' must be of type ''{1}''.]

(MVC 4, .NET 4.0)