none
Gravação/Validação dos dados. RRS feed

  • Pergunta

  • Estou com uma dúvida..

    Supondo que eu tenha um model com 5 propriedades(todas com Required) que é usada em muitas páginas diferentes..

    Se eu criar uma nova página e precisar salvar um obj deste model sendo nenhuma propriedade é obrigatória, qual a melhor forma de fazer?


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

    domingo, 25 de março de 2012 00:53

Respostas

Todas as Respostas

  • Ola Murilo,

    Você pode usar o model normalmente, apenas use o Bind Attribute para especificar que você não quer que ele valide os campos deste modo:

    public ActionResult Cadastrar([Bind(Exclude="Campo1,Campo2,Campo3,Campo4,Campo5")] MeuModelo modelo)
    {
       //Toda lógica do controllador aqui
    }


    "Faça as coisas da forma mais simples possível. Mas não mais simples do que isto" - Albert Einstein

    domingo, 25 de março de 2012 02:52
  • Murilo,   Não entendi bem,   mas vou tentar explicar oque compreendi, 

    Digamos que eu tenha uma classe com 5 parametros e utilizo esta em várias páginas,. esta classe tem o REQUIRED em todas as propriedades, 

    Quando crio uma view específica e não quero utilizar o REQUIRED por algum motivo eu utilizo a validação direta no Controller.

    por exemplo:

    public ActionResult Contato()
    {
    return view();
    }
    
    [HttpPost]
    public ActionResult Contato(Contato contato)
    {
    
    ValidaCampos();
    
    if(ModelState.Isvalid)
    {
    //Faz alguma coisa
    }
    
    return redirectToAction("Index","Home"); //por exemplo
    
    } 
    
    
    
    public void ValidaCampos(Contato contato)
    {
    
    if(String.IsnullOrEmpty(contato.Nome))
    ModelState.AddError("Nome","Nome é requerido!");
    }

    Espero que ajude....

    Qualquer dúvida, posta ai


    http://fparmezani.wordpress.com

    domingo, 25 de março de 2012 15:27
  • Boa noite Fernando.

    Não entendi direito... neste caso eu teria que tirar todos os requireds de todos os campos da model e fazer as validações manualmente em todas as outras páginas?


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

    segunda-feira, 26 de março de 2012 02:03
  • Boa noite Oliveira.

    Não estou conseguindo retirar as validações.

    Tenho uma action assim:

            [HttpPost]
            public ActionResult Create([Bind(Exclude="Nome,SobreNome")]Pessoa pessoa)
            {
                    db.Pessoas.Add(pessoa);
                    db.SaveChanges();
                    
                    return RedirectToAction("Index");
            }

    e um Model com 2 propriedades(Nome e SobreNome) com Required.

    Mas está ocorrendo erro na hora de realizar o SaveChanges:

    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.


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

    segunda-feira, 26 de março de 2012 02:08
  • Olá Murilo,

    Isto esta ocorrendo porque as colunas da sua tabela estão setadas para serem obrigatórias e que não aceitam valores nulos, e quando você o mapeia para o entity ele faz esta validação antes para dar um insert no banco.

    o que você poderia fazer é permitir valores nulos na tabela, atualizar o entity model, e usar viewModels com DataAnimations para fazer a validação, aí você cria uma viewModel para cada tipo de situação e depois de validada você a mapeia para sua entidade e aplica o saveChanges().

    http://stephenwalther.com/blog/archive/2009/04/13/asp-net-mvc-tip-50-ndash-create-view-models.aspxhttp://imasters.com.br/artigo/18900/desenvolvimento/entendendo-o-pattern-model-view-viewmodel-mvvm


    "Faça as coisas da forma mais simples possível. Mas não mais simples do que isto" - Albert Einstein

    • Sugerido como Resposta Wilian NS quinta-feira, 29 de março de 2012 16:11
    • Marcado como Resposta welington jrModerator terça-feira, 6 de março de 2018 15:55
    segunda-feira, 26 de março de 2012 13:55