none
Data annotations - Validar parte do modelo RRS feed

  • Pergunta

  • Pessoal,

    Criei uma classe Usuario e alguns atributos decorei com alguns data annotations. Tenho no meu controller LogonController uma Action Autenticar(Usuario usuario) que recebe um objeto Usuario como parametro. No controller faço a verificacao se o modelo é valido para dar sequencia na requiscao de autenticacao. O problema é que neste caso na minha View os unicos campos que estao sendo preenchidos sao logon e senha o resto vem nulo e isso esta invalidando o modelo. Existe a possibilidade de apenas neste momento desabilitar todos os annotations dos outros atributos para que meu modelo seja valido quando chegar no controller?

    Grato pela atenção.

    segunda-feira, 3 de dezembro de 2012 17:45

Respostas

  • Marcelo, o correto é você não usar uma classe de dominio(sua classe Usuario que provavelmente representa uma tabela no banco) diretamente na view.

    O correto é você usar uma viewmodel contêndo apenas os dados que vão aparecer na tela.

    No seu caso ficaria assim:

    public class UserLogin{ [Required] public string Login {get;set;} [Required] public string Password {get;set;} } public ActionResult Login(UserLogin userLogin)

    { if(ModelState.IsValid){ } return View(); }


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

    segunda-feira, 3 de dezembro de 2012 17:53

Todas as Respostas

  • Marcelo, o correto é você não usar uma classe de dominio(sua classe Usuario que provavelmente representa uma tabela no banco) diretamente na view.

    O correto é você usar uma viewmodel contêndo apenas os dados que vão aparecer na tela.

    No seu caso ficaria assim:

    public class UserLogin{ [Required] public string Login {get;set;} [Required] public string Password {get;set;} } public ActionResult Login(UserLogin userLogin)

    { if(ModelState.IsValid){ } return View(); }


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

    segunda-feira, 3 de dezembro de 2012 17:53
  • Murilo,

    Eu ja tinha pensado em fazer isso mesmo mas é que imaginei que pudesse existir a possibilidade de em determinada situacao ignorar algum annotation.

    Grato pela força!

    segunda-feira, 3 de dezembro de 2012 18:03
  • Até dá para fazer, é só você limpar a propriedade no modelstate:

    ModelState["Propriedade"].Errors.Clear();
    Mas isso só vai trazer problemas, melhor fazer com a viewmodel mesmo.


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

    segunda-feira, 3 de dezembro de 2012 18:06