Onde está toda a lista de mensagens de erro padrão para DataAnnotations no MVC 3

Ainda outra pergunta de localização do MVC ...

Estou tentando localizar um aplicativo ASP.Net MVC 3 usando arquivos de recursos localizados para exibir textos nos modos de exibição, conforme recomendad

O problema é, como sempre, ao tentar localizar as mensagens de erro padrão das anotações de dado

Sei que você pode especificar o arquivo de recursos e digitar todos os Atributos:

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

and even, que é melhor e preferido, você pode substituir a mensagem padrão, assim: Recurso padrão para anotações de dados no ASP.NET MVC, para que você possa deixar os atributos como:

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

Esta última abordagem é a que eu estava seguindo e funciona, mas apenas quando o DataAnnotation que você deseja substituir possui uma e apenas uma mensagem de erro, pois sempre procura uma chave de recurso chamada igual ao atributo no recurso personalizado arquivo (por exemplo, "Necessário" precisa de uma entrada "RequiredAttribute" no arquivo de recurso)

Outros atributos, como StringLength, têm mais de uma mensagem de erro, dependendo dos parâmetros opcionais que você usa. Então, se você tem um modelo como:

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

A mensagem de erro é "O campoNome do usuári deve ser uma sequência com um comprimento mínimo de5 e um comprimento máximo de 10."

E se você alterar o atributo StringLength para:

    [StringLengthLocalizedAttribute(10)]

a mensagem de erro muda para "O campoNome do usuári deve ser uma sequência com um comprimento máximo de 10. "Portanto, neste caso, há pelo menos 2 mensagens de erro padrão a serem substituídas e as soluções fornecidas por @ kim-tranjan falham.

Minha solução parcial para isso é implementar meu próprio atributo StringLength 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);
    }
}

Onde tenho um recurso localizado "CustomValidationResource" com as mensagens de validação e defina-o como ErrorMessageResourceType. Em seguida, substituindo a função FormatErrorMessage, decido qual sequência de mensagens deve ser aplicada, dependendo dos parâmetros opcionai

Então, a pergunta aqui é: Alguém sabe onde podemos encontrar toda a lista de chaves de recursos usadas pelos Atributos de DataAnnotation e veja quantas mensagens de erro diferentes temos em cada uma, sem testar cada uma dela

Ou melhor ainda, podemos ter o arquivo RESX original para ver os modelos de string e localizá-los usando as mesmas chaves de recurso? Dessa forma, alterar apenas o ErrorMessageResourceType deve funcionar para todos os DataAnnotations Attibutes e não preciso adivinhar onde colocar "{1}" ou "{2}" na minha string localizada.

brigado, Sergi

questionAnswers(3)

yourAnswerToTheQuestion