Qual é a diferença de comportamento [MaxLength]
e [StringLength]
atributos?
Tanto quanto eu posso dizer (com a exceção que [MaxLength]
pode validar o comprimento máximo de uma matriz), estes são idênticos e um pouco redundantes?
asp.net-mvc-3
ef-code-first
entity-framework-4.1
Nick Goloborodko
fonte
fonte
Respostas:
MaxLength é usado para o Entity Framework para decidir o tamanho do campo de valor da string ao criar o banco de dados.
Do MSDN:
StringLength é uma anotação de dados que será usada para validação da entrada do usuário.
Do MSDN:
fonte
MaxLengthAttribute
, enquanto EF reconheceStringLengthAttribute
[MaxLength]
tem um ErrorMessage então?Algumas informações adicionais rápidas, mas extremamente úteis, que acabei de aprender em outro post, mas não consigo encontrar a documentação (se alguém puder compartilhar um link para ele no MSDN, isso seria incrível):
As mensagens de validação associadas a esses atributos realmente substituirão os espaços reservados associados aos atributos. Por exemplo:
Produzirá o seguinte se estiver acima do limite de caracteres: "O endereço pode ter no máximo 100 caracteres"
Os espaços reservados que eu conheço são:
Muito obrigado a bloudraak por inicialmente apontar isso.
fonte
A seguir estão os resultados quando usamos os atributos
[MaxLength]
e[StringLength]
, emEF code first
. Se ambos forem usados,[MaxLength]
vence a corrida. Veja o resultado do teste nastudentname
coluna abaixo da turmafonte
Todas as boas respostas ... Do ponto de vista da validação, também notei que o MaxLength é validado apenas no lado do servidor, enquanto StringLength também é validado no lado do cliente.
fonte
MaxLengthAttribute significa Max. comprimento dos dados da matriz ou da sequência permitidos
StringLengthAttribute significa Min. e max. comprimento de caracteres permitidos em um campo de dados
Visite http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
fonte
Outro ponto a ser observado é no atributo MaxLength, você pode fornecer apenas o intervalo máximo necessário e não o mínimo necessário. Enquanto em StringLength, você pode fornecer ambos .
fonte
Eu o resolvi adicionando a linha abaixo no meu contexto:
De alguma forma,
[MaxLength]
não funcionou para mim.fonte
Ao usar o atributo para restringir o comprimento máximo de entrada de texto de um formulário em uma página da Web, o StringLength parece gerar o atributo maxlength html (pelo menos no meu teste com o MVC 5). A pessoa a escolher depende de como você deseja alertar o usuário que esse é o tamanho máximo do texto. Com o atributo stringlength, o usuário simplesmente não poderá digitar além do comprimento permitido. O atributo maxlength não adiciona esse atributo html, mas gera atributos de validação de dados, o que significa que o usuário pode digitar além do comprimento indicado e impedir uma entrada mais longa depende da validação em javascript quando ele passa para o próximo campo ou clica em Enviar (ou se o javascript estiver desativado, validação no servidor). Nesse caso, o usuário pode ser notificado sobre a restrição por uma mensagem de erro.
fonte