Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Fazer POST a partir de view

Teria como fazer um post a partir de uma view que já recebe um objeto no model? Por exemplo a view de carrossel, que recebe a Lista de produtos no model.

@model List<Produto>;

Se eu quisesse inserir um formulário com um campo texto nessa view, como que eu mandaria o que foi digitado por esse campo de texto para o servidor?

3 respostas

Olá, Tauan

Ótima pergunta. Nesse caso, você precisa usar um model específico para a view, ou seja uma ViewModel. Nessa ViewModel seria uma nova classe, que conteria:

  • A lista de produtos (List<Produto>)
  • Uma string para o campo texto digitado na página

Se você usar a diretiva @model para essa ViewModel em vez de para List<Produto>, e fizer o binding para esse campo string na view, o POST irá enviar o texto digitado no objeto enviado para a action no controller.

Você pode ver como fizemos isso na classe CarrinhoViewModel, que possui não só a lista de produtos, mas também um campo contendo o cálculo do total do pedido.

No caso eu faria o POST e receberia todo o objeto da viewmodel ou apenas a string?

solução!

No caso eu faria o POST e receberia todo o objeto da viewmodel ou apenas a string?

Somente a string vai ser enviada. No método da Action do Controller, o atributo de parâmetro [FromBody] vai fazer com que os campos vindos da view sejam "amarrados" (bound) a uma nova instância da ViewModel. Mas os campos da ViewModel que desceram do servidor para a view inicialmente não serão enviados de volta para o servidor, se eles não foram usados no formulário