Para que é usado DataType (DataType. *)? [duplicado]
Eu usei atributos de dados como [EmailAddress]e [DatabaseGenerated(DatabaseGeneratedOption.None)]para validação do lado do servidor no asp.net core mvc e para mapeamento no Entity Framework Core, mas nunca DataType(DataType.Example), eu tentei pesquisar sobre isso, mas ainda não entendo o conceito ou o propósito disso.
O que procuro é uma explicação com exemplos sobre a sua utilização prática. Você pode usar o exemplo a seguir como referência.
public class ProvidingContext
{
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[DataType(DataType.PhoneNumber)]
public string PhoneNumber { get; set; }
[DataType(DataType.Url)]
public string Url { get; set; }
[DataType(DataType.Currency)]
public double Price { get; set; }
}
Respostas
O atributo é meramente uma anotação (diz algo sobre uma propriedade, mas não faz nada por si mesmo) e documentado como tal :
Representa uma enumeração dos tipos de dados associados a campos de dados e parâmetros.
O que o MVC faz com ele não é realmente documentado. No entanto, há um tutorial oficial do MVC que explica alguns de seus usos :
Os atributos DataType fornecem apenas dicas para o mecanismo de visualização formatar os dados (e fornece elementos / atributos como para URL e para e-mail. Você pode usar o atributo RegularExpression para validar o formato dos dados. O atributo DataType é usado para especificar um tipo de dados que é mais específico do que o tipo intrínseco do banco de dados, eles não são atributos de validação. Nesse caso, queremos apenas controlar a data, não a hora.
A Enumeração DataType fornece muitos tipos de dados, como Data, Hora, PhoneNumber, Currency, EmailAddress e mais. O atributo DataType também pode permitir que o aplicativo forneça automaticamente recursos específicos do tipo. Por exemplo, um link mailto: pode ser criado para DataType.EmailAddress e um seletor de data pode ser fornecido para DataType.Date em navegadores que suportam HTML5.
Os atributos DataType emitem atributos de dados HTML 5 (pronuncia-se traço de dados) que os navegadores HTML 5 podem entender. Os atributos DataType não fornecem nenhuma validação.
Veja também:
- O DataTypeAttribute em um modelo faz validação no MVC 3?
- Atributo EmailAddress ou DataType.Email
Então: Razor usa para renderizar atributos de forma que os navegadores possam mostrar validação nativa e controles de seleção (por exemplo, selecionadores de data, entrada numérica, ...).
Além do que @codecaster disse, o EmailAddressatributo deriva de DataTypeAttributee adiciona validação do lado do servidor enquanto o DataTypeatributo define apenas o tipo de entrada.
Portanto, o EmailAddressatributo oferece as duas funcionalidades.