none
Enviar model pelo form e retornar atualizado para a View RRS feed

  • Pergunta

  • Estou tentando da View enviar um model para o controle usando Post, quando chegar la vou atualizar este modelo e devolver atualizado para a View. Até onde eu entendi isso deveria funcionar mas nao esta acontecendo no codigo abaixo:

    Meu modelo

        public class Cliente
        {
            public int IdCliente { get; set; }
            public string Nome { get; set; }
            public string Email { get; set; }
        }

    Aqui o meu Controller:

        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
    
    
    
            [HttpPost]
            public ActionResult Index(Cliente Obj)
            {
    
                Obj.IdCliente = 1;
    
                return View(Obj);
    
            }
    
        }

    E aqui a View:

    @model MvcApplication8.Models.Cliente
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>Index</title>
    </head>
    <body>
        <div>
            @using (Html.BeginForm("Index", "Home", FormMethod.Post))
            {
                @Html.LabelFor(model => model.IdCliente)
                @Html.TextBoxFor(model => model.IdCliente)
                <br />
                @Html.LabelFor(model => model.Nome)
                @Html.TextBoxFor(model => model.Nome)
                <br />
                @Html.LabelFor(model => model.Email)
                @Html.TextBoxFor(model => model.Email)
    
                <input type="submit" value="Salva" />
            }
        </div>
    </body>
    </html>

    O que eu estou tentando fazer é enviar o model sem o Id e no controller eu passo esta informacao ao objeto e envio novamente para a view. Mas nao acontece nada, a view nao esta sendo atualizada.

    Estou fazendo algo de errado.

    sexta-feira, 25 de janeiro de 2013 17:00

Respostas

  • Isso acontece porque por padrão os helpers pegam a informação do modelstate pois o asp.net mvc considera os dados retornados para a view como dados que são inválidos.

    Portanto para resolver isso você precisa limpar o valor enviado no ModelState:

    ModelState.Clear();

    e depois reenviar o model:

     [HttpPost]
            public ActionResult Index(Cliente Obj)
            {
                ModelState.Clear();
               
                Obj.IdCliente = 1;
    
                return View(Obj);
    
            }


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

    • Sugerido como Resposta Al.Simões sexta-feira, 25 de janeiro de 2013 17:34
    • Marcado como Resposta Marcelo Moreira Souza sábado, 26 de janeiro de 2013 02:50
    sexta-feira, 25 de janeiro de 2013 17:15

Todas as Respostas

  • Isso acontece porque por padrão os helpers pegam a informação do modelstate pois o asp.net mvc considera os dados retornados para a view como dados que são inválidos.

    Portanto para resolver isso você precisa limpar o valor enviado no ModelState:

    ModelState.Clear();

    e depois reenviar o model:

     [HttpPost]
            public ActionResult Index(Cliente Obj)
            {
                ModelState.Clear();
               
                Obj.IdCliente = 1;
    
                return View(Obj);
    
            }


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

    • Sugerido como Resposta Al.Simões sexta-feira, 25 de janeiro de 2013 17:34
    • Marcado como Resposta Marcelo Moreira Souza sábado, 26 de janeiro de 2013 02:50
    sexta-feira, 25 de janeiro de 2013 17:15
  • Murilo,

    Esta isso mesmo cara.

    Mais uma vez salvou o dia!

    Muito obrigado, voce é o cara.

    sexta-feira, 25 de janeiro de 2013 17:23
  • Só não esquece de marcar como resposta :)

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

    sexta-feira, 25 de janeiro de 2013 17:32
  • Só para acrescentar o entendimento.

    Dê uma olhada nesse post criado pelo MVP Ivan Paulovich.

    Ele retrata bem essa questão do Post e o retorno para a View.

    http://www.100loop.com/destaque/entendendo-o-postback-no-asp-net-mvc-passo-a-passo/

    É feita a verificação antes se o ModelState is valid... Vale a pena conferir

     if (ModelState.IsValid)

            {

    }


    sexta-feira, 25 de janeiro de 2013 17:37