por Vinicius Quaiato |
Fala galera, belezinha?
Esses dias tive um pequen problema e quero compartilhar como resolvi isso. Basicamente um input de dados no meu sistema ASP.NET Core estava tratando o formato da data digitada de maneira diferente dependendo da máquina onde a aplicação estivesse rodando: na minha máquina, cujo sistema está em inglês com as datas no padrão MM/dd/yyyy as validações do ASP.NET falhavam. Já na máquina de outro membro do time, com o sistema em português e as datas no padrão dd/MM/yyyy as validações funcionavam. Nos servidores algo parecido acontecia, bem chato.
Uma das maneiras de resolver este problema é instruindo o ASP.NET a usar um ModelBinder espeífico para este campo, e então converter a string para uma data utilizando o locale correto:
[ModelBinder(BinderType = typeof(PtBrDateTimeBinder))] public class FooViewModel{ public DateTime? DataNascimento {get; set;} } public class PtBrDateTimeBinder : IModelBinder { public Task BindModelAsync(ModelBindingContext bindingContext) { var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); var value = valueProviderResult.FirstValue; DateTime outDate; var parsed = DateTime.TryParse(value, CultureInfo.GetCultureInfo("pt-BR").DateTimeFormat, DateTimeStyles.None, out outDate); bindingContext.Result = parsed ? ModelBindingResult.Success(outDate) : ModelBindingResult.Failed(); return Task.FromResult(0); } }
Basicamente o que fazemos é obter o provedor de valores para a propriedade
Então faço uma simples conversão para DateTime, e informo para o
DataNascimento
, e então obter o valor desta pripriedade como uma string (antes do binding ser feito no model).Então faço uma simples conversão para DateTime, e informo para o
ModelBindingContext
se houve sucesso no binding ou erro. No caso de sucesso eu informo o valor convertido.
Bem simples e tranquilo. O interessante desta abordagem é que ela pode ser utilizada em pontos específicos da aplicação, sem que seja necessária a alteração de todos os requests, models, etc. pode ser utilizando em pontos isolados e específicos.
Abraços,
Quaiats.
Quaiats.
Nenhum comentário:
Postar um comentário