none
HttpPost Action com Tuple<> RRS feed

  • Pergunta

  • Tenho uma view onde o model é uma Tuple<Object,IEnumerable<Object>>.

    Tenho um botão submit, e alguns textboxs para criar um novo Object.

    Na action HttpPost, estou com problemas em saber o que colocar como parâmetro.

    [HttpPost]
    public ActionResult Edit(???){
    
    }

    Tenho que colocar a tuple?

    quarta-feira, 1 de agosto de 2012 20:42

Todas as Respostas

  • Thiago, o que exatamente você quer fazer?

    Não importa ao tempo o minuto que passa, mas o minuto que vem.

    quarta-feira, 1 de agosto de 2012 20:54
  • Tenho uma view, que eu quero exibir uma tabela de produtos, e logo embaixo adicionar um único produto. Ou seja, o model da View é alimentado com uma tuple<IEnumerable<Produto>,Produto> (respectivamente para a lista de produtos e para o cadastro do novo produto).

    Tenho um form com um submit. Queria saber os parâmetros que a action que é chamada no click do submit precisa ter.

    Quando faço uma view sem a lista dos produtos, apenas para cadastro, essa action recebe um objeto de Produtos. Mas como não sei mexer com tuples direito, nao sei se a action precisa ter como parametros as mesmas coisas que alimentam a tuple.

    quinta-feira, 2 de agosto de 2012 12:01
  • Thiago,

    Para listar os produtos, você pode fazer um select usando o Linq

    http://msdn.microsoft.com/en-us/library/bb386964.aspx

    e se o seu submit for de edição, você pode passar o id e depois usar o método db.MyDB.FInd()

    Se não ajudar posta o código ai que vemos o que podemos fazer....


    Não importa ao tempo o minuto que passa, mas o minuto que vem.

    quinta-feira, 2 de agosto de 2012 14:15
  • Não amigo, não entendeu.

    Numa mesma View, eu exibo uma lista de produtos, e embaixo da lista tenho campos para fazer a adição de um novo produto.

    O model dessa View é um Tuple<IEnumerable<Produto>,Produto>. O IEnumerable é para alimentar a lista e o Produto é para o novo produto.

    Quando clico num submit da página, uma action é chamada, passando o produto como parâmetro. Porém, os parametros dessa action não estão funcionando. Coloco um break e vejo que o produto que é passado como parametro pra action está null. 

    Minha pergunta é, uma action que tem como model em sua view uma tuple<>, precisa ter como parametro uma tuple<> também ou nao necessariamente ?

    quinta-feira, 2 de agosto de 2012 15:45
  • Não precisa de "Tuple" para inserir um produto a partir de uma determinada view. Basta um Html.BeginForm("Action", "Controller", FormMethod.Post).

    Sua Action no Controller teria a assinatura normal de um post com o objeto produto:

    public ActionResult InsereProduto(Produto produto){
    //processa inserção
    }

    No form basta ter os campos correspondentes da entidade produto, o ModelBinding faz o resto pra vc.


    sexta-feira, 3 de agosto de 2012 21:13
    Moderador
  • Tenho uma view onde o model é uma Tuple<Object,IEnumerable<Object>>.

    O João Prado já respondeu a sua questão (o que vale é o que você enviar no formulário e o ModelBinder vai tentar mapear as propriedades com o mesmo nome), mas estou aqui intrigado:

    Qual a razão de usar um Tuple ao invés de criar uma específica classe e com um nome apropriado para representar os dados que são mostrados na página (ex: ProductsIndexViewModel) e que tenha propriedades com nomes que façam sentido para qualquer programador?

    E que usar @Model.Item1 e @Model.Item2 na View não é nada intuitivo se comparado com @Model.Products e @Model.Product. Sem contar que o dia que a View "crescer" e tiver mais propriedades, vai acabar por ter Item3, 4, 5, etc... É horrível.


    Abraços,
    Caio Proiete

     


    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    domingo, 5 de agosto de 2012 12:38
    Moderador
  • Sou novato em MVC, mas como então eu listo produtos em uma View e logo embaixo eu coloco campos para adicionar um produto novo ?

    Na listagem dos produtos, eu envio como Model para a View um IEnumerable de Produto.

    Mas para criar um produto novo, quando crio um textbox para inserção do nome por exemplo, crio 

    @Html.TextBox(m => m.Nome)

    Então ... esse "m.Nome" não faz parte do IEnumerable. Então eu tenho que passar como Model (além do IENumerable) um Produto nao é ?

    terça-feira, 7 de agosto de 2012 16:16
  • O (m => m.Nome) é uma referência a um objeto mas se esse objeto for nulo os textbox vão vir vazios para preenchimento.

    Se você passar um objeto válido os textbox serão preenchidos com os valores correspondentes.

    Você não precisa passar um objeto como model para ter um formulário de inserção.

    Minha sugestão: Crie uma partial view "InserirProduto" com o form de inserção e use RenderPartial para exibir a mesma onde você precisar.

    terça-feira, 7 de agosto de 2012 18:59
    Moderador