none
Data annotation aparece do nada RRS feed

  • Pergunta

  • Pessoal,

    Estou tendo alguns problemas de validação do modelos em alguns formularios. Alguns annotations que eu nem adicionei estao aparecendo em algumas propriedades. Vou mostrar abaixo:


    Uma propriedade da minha classe Cliente:

    [Display(Name = "Início da Atividade")]
    public DateTime DataAtividade { get; set; }

    Agora veja View + Razor:

    @Html.LabelFor(model => model.Cliente.DataAtividade)
    @Html.TextBoxFor(model => model.Cliente.DataAtividade)

    Agora o Html gerado:

    <td>
    <label class="labelForClass" for="Cliente_DataAtividade" id="lblDataAtividade">In&#237;cio da Atividade</label>
    <input class="textBoxForClass" data-val="true" data-val-date="O campo Início da Atividade deve ser uma data." data-val-required="O campo Início da Atividade é obrigatório." id="Cliente_DataAtividade" name="Cliente.DataAtividade" style="width: 100px;" type="text" value="01/01/0001 00:00:00" />
    </td>

    Ele enfiou ali um required ali do nada. Alguem sabe como posso resolver isso?

    Obrigado!



    segunda-feira, 21 de janeiro de 2013 16:38

Respostas

  • Isso ocorre pq o seu DateTime jamais pode ser null, para resolver isso você pode usar um Nullable<DateTime>:

    [Display(Name = "Início da Atividade")]
    public Nullable<DateTime> DataAtividade { get; set; }

    ou na forma simplificada:

    [Display(Name = "Início da Atividade")]
    public DateTime? DataAtividade { get; set; }

    Agora para acessar o valor do seu datetime, você precisa usar a propriedade .Value:

    public ActionResult Index(DateTime? parameter){
         if(parameter.HasValue){
              DateTime date = parameter.Value;
         }
    }
    Isso fará o DateTime não ser obrigatório.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    segunda-feira, 21 de janeiro de 2013 16:47

Todas as Respostas

  • Isso ocorre pq o seu DateTime jamais pode ser null, para resolver isso você pode usar um Nullable<DateTime>:

    [Display(Name = "Início da Atividade")]
    public Nullable<DateTime> DataAtividade { get; set; }

    ou na forma simplificada:

    [Display(Name = "Início da Atividade")]
    public DateTime? DataAtividade { get; set; }

    Agora para acessar o valor do seu datetime, você precisa usar a propriedade .Value:

    public ActionResult Index(DateTime? parameter){
         if(parameter.HasValue){
              DateTime date = parameter.Value;
         }
    }
    Isso fará o DateTime não ser obrigatório.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    segunda-feira, 21 de janeiro de 2013 16:47
  • Murilo,

    Era isso mesmo cara. O mesmo estava acontecendo com uns campos do tipo inteiro.

    Problema resolvido.

    Obrigado!

    segunda-feira, 21 de janeiro de 2013 17:08