MVC 3处DataAnnotations的默认错误消息的整个列表在哪里?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (426)

我试图本地化一个ASP.Net MVC 3应用程序,使用本地化的资源文件在视图中显示文本。

像往常一样,问题在于尝试本地化来自数据注释的默认错误消息。

我知道你可以在每个属性中指定资源文件和密钥:

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

甚至,这是更好的和首选的,你可以重写默认消息,如下所示:ASP.NET MVC中的数据注释的默认资源,所以你可以保留属性如下:

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

最后一种方法是我所遵循的方法,它的工作原理是,但只有当你要覆盖的DataAnnotation具有ONE和ONLY ONE错误消息时,它始终会查找与自定义资源文件中的属性相同的资源键(例如,“必需”需要资源文件中的“RequiredAttribute”条目)

其他属性,如StringLength,具有多个错误消息,具体取决于你使用的可选参数。所以,如果你有像这样的模型:

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

该错误消息是"The field User name must be a string with a minimum length of 5 and a maximum length of 10."

如果你将StringLength属性更改为:

    [StringLengthLocalizedAttribute(10)]

错误消息更改为"The field User name must be a string with a maximum length of 10." 因此,在这种情况下,至少有2个默认错误消息可以覆盖,并且@ kim-tranjan提供的解决方案失败。

我的部分解决方案是实现我自己的StringLength属性,如下所示:

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);
    }
}

我有一个本地化的资源“CustomValidationResource”与验证消息,并将其设置为ErrorMessageResourceType。然后,重写FormatErrorMessage函数,根据可选参数决定应该应用哪个消息字符串。

所以,这里的问题是:有人知道我们在哪里可以找到DataAnnotation Attributes使用的所有资源键的列表,然后看看每个错误消息有多少个不同的错误消息,而无需测试每个错误消息?

或者甚至更好,我们可以让原始RESX文件查看字符串模板并使用相同的资源键对其进行本地化?这样,只更改ErrorMessageResourceType应该适用于所有DataAnnotations Attibutes,并且我不需要猜测将“{1}”或“{2}”放在我的本地化字符串中的位置。

提问于
用户回答回答于

如果你System.ComponentModel.DataAnnotations.dll用Reflector这样的工具打开它,你可以打开资源System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources.resources并看看。

你还可以检出System.ComponentModel.DataAnnotations.Resources.DataAnnotationsResources提供对资源字符串的访问权限的类。

用户回答回答于
[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}'.]

扫码关注云+社区

领取腾讯云代金券