jquery - yyyy - O valor especificado não está em conformidade com o formato necessário aaaa-MM-dd




the specified value does not conform to the required format yyyy-mm-dd jquery (4)

As especificações para o seletor de datas HTML5 indicam que a data deve estar no formato yyyy-MM-dd (formato ISO). Isso significa que você DisplayFormatAttribute deve estar

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string MyDate { get; set; }

Como alternativa, você pode adicionar manualmente o formato usando

@Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date"  })

A opção posterior permite manter o DataFormatString = "{0:dd/MM/yyyy}") para uso em @Html.DisplayFor()

Eu tenho um aplicativo .Net MVC 5 que usa Anotações de Dados, Entity-Framework Jquery 2.1.3 e Jquery UI 1.11.4.

Quando renderizo um formulário de edição com uma entrada do tipo data usando o formato do Reino Unido "dd / MM / AAAA"; a seguinte mensagem de erro aparece ao usar o Google Chrome:

O valor especificado '10/10/2001' não está em conformidade com o formato exigido, 'aaaa-MM-dd'. jquery-2.1.3.js: 5317

Modelo

public class MyModel
{
    [Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public string MyDate { get; set; }
}

Marcar

<input class="text-box single-line" data-val="true" data-val-date="The field My date must be a date." id="MyDate" name="MyDate" type="date" value="10/10/2001" />

O valor está definido corretamente no controle de entrada, mas a data não aparece no navegador. Primeiro, pensei que esse era um problema com o jQuery, pois ele aparece no arquivo de script do jQuery, mas ao testar no IE e no Firefox tudo está funcionando bem.

Eu então assumi que era minha configuração regional no chrome, pois por padrão o Chrome acha que todo mundo em inglês está nos Estados Unidos, alterei a configuração regional para Reino Unido e ainda aparece o mesmo problema.

Uma solução simples seria alterar o formato do meu modelo para universal, mas para usuários do Reino Unido isso é um pouco estranho.

Existe uma maneira de dizer ao chrome que aceita formatos de data em "dd / MM / AAAA"?


Defina o atributo type como texto.

@Html.TextBoxFor(m => m.MyDate, new { @type = "text"  })

O problema pode ser do tipo = "data". Essa era a minha situação de qualquer maneira. Funcionou uma vez que foi alterado para type = "text". Se a interface for construída com um wrapper MVC, você precisará substituir ou configurar o atributo html adequadamente.