none
ModelState.IsValid RRS feed

  • Pergunta

  • Boa tarde!

    Pessoal gostaria de saber como editar(Edit) apenas alguns campos usando MVC4, exemplo:

    Tenho uma classe Usuario com os seguintes atributos todos eles são obrigatorio(Required) no cadastro:

    ID*

    Nome*

    Email*

    Senha*

    FlagAtivo*

    DataCadastro*

    gostaria de editar apenas:

    Nome

    Email

    FlagAtivo

    Não estou conseguindo devido o ModelState.IsValid sempre é falso, quando coloco todos os campos e vem true, porem não quero editar todos.

    segunda-feira, 31 de março de 2014 17:39

Todas as Respostas

  • Olá Santos,

    Você pode especificar qual das propriedades o erro sera removido, caso exista a possibilidade você criar uma model apenas para atualização seria melhor:

    Exemplo 1:
    var prop1 = ModelState["Propriedade1"];
    prop1.Errors.Clear(); 
    
    if(ModelState.IsValid)
    {
       //Fazer algo...
    }

    Exemplo 2:

    public ActionResult Insert(InsertClientModel model)
    {
    
    }
    
    public ActionResult Update(UpdateClientModel model)
    {
    
    }

    Afinal de contas você esta submetendo valores para o servidor que não serão utilizado, a não ser que você reexiba a View de alteração com estas informações novamente em caso de erro, então deves desconsiderar o exemplo 2.


    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    segunda-feira, 31 de março de 2014 17:54
  • se eu criar uma model com apenas os campos que eu quero alterar, isso seria uma boa pratica de desenv?
    segunda-feira, 31 de março de 2014 18:06
  • Sim, pois como você disse, o únicos campos que podem ser alterado é Nome, Email e FlagAtivo, certamente os demais campos são apenas leitura, logo não existe a necessidade de envia-los ao servidor se os mesmo não serão alterados.

    Porem existe a observação que comentei no final do exemplo 2, se você deseja exibir a tela de edição apontando os erros nos campos que não foram preenchidos você terá que retornar para esta sua View de edição a model com as propriedades preenchidas.

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    segunda-feira, 31 de março de 2014 18:21
  • Sim, pois como você disse, o únicos campos que podem ser alterado é Nome, Email e FlagAtivo, certamente os demais campos são apenas leitura, logo não existe a necessidade de envia-los ao servidor se os mesmo não serão alterados.

    Porem existe a observação que comentei no final do exemplo 2, se você deseja exibir a tela de edição apontando os erros nos campos que não foram preenchidos você terá que retornar para esta sua View de edição a model com as propriedades preenchidas.

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)


    Desculpe, não compreendi o exemplo 2, poderia exemplificar melhor?
    quarta-feira, 2 de abril de 2014 00:45
  • Santos,

    Seria algo deste genero:

    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }
    
    [HttpGet]
    public ActionResult Success()
    {
        return View();
    }
    
    [HttpGet]
    public ActionResult Edit(int id)
    {
        //TODO Buscar pelo id
    
        return View(new ClientModel()); //Sua Model com as informações do cliente
    }
    
    [HttpPost]
    public ActionResult Edit(ClientModel model)
    {
        var prop1 = ModelState["Email"];
        prop1.Errors.Clear();
    
        if (ModelState.IsValid)
        {
            //TODO Fazer algo e alterar cliente com sucesso...
            RedirectToAction("Success");
        }
    
        return View(model); //Retornando a mesma model que foi enviada para o servidor, 
                            //e reexibindo a tela de dição para o usuario as informações 
                            //e dizer que algo esta errado
    }

    Onde você poderia usar o ValidationSummary para dizer quais são os erros na sua Model:
    http://20fingers2brains.blogspot.com/2013/03/validationsummary-html-helper-in-mvc3.html

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)


    • Editado Vitor Mendes quinta-feira, 3 de abril de 2014 13:55
    quinta-feira, 3 de abril de 2014 13:54