Controller:
[HttpPost]
public ActionResult Create(Pedido pedido)
{
List<Produto> lista = new List<Produto>();
if (ModelState.IsValid)
{
Cliente cliente = unitOfWork.ClienteRepository.Busca(pedido.ClienteId);
Produto produto = unitOfWork.ProdutoRepository.Busca(pedido.ProdutoId);
lista.Add(produto);
pedido.produtos = lista;
pedido.cliente = cliente;
unitOfWork.PedidoRepository.Adiciona(pedido);
unitOfWork.Salva();
return RedirectToAction("Index");
}
ViewBag.ProdutoId = new SelectList(context.Produtos, "ID", "Nome", pedido.ProdutoId);
ViewBag.ClienteId = new SelectList(context.Clientes, "ID", "NomeCliente", pedido.ClienteId);
return View(pedido);
}
Okay ... I can save my order with an instantiated client and a list of products ... but when this controller passes that request to my View INDEX ... the client object and the list of products arrives empty.
VIEW
@model IEnumerable<ProjetoZeus.Models.Pedido>
@{
ViewBag.Title = "Index";
}
<h2>Lista de Pedidos</h2>
<p>
@Html.ActionLink("Adicionar Novo", "Create")
</p>
<fieldset>
<legend>Pedidos</legend>
<table>
<tr>
<th>@Html.DisplayNameFor(model => model.ID)</th>
<th>Produto</th>
<th>Preço</th>
<th>@Html.DisplayNameFor(model => model.cliente)</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(model => item.ID)
</td>
<td>
@Html.DisplayFor(model => item.produtos[0].Nome)
</td>
<td>
@Html.DisplayFor(model => item.produtos[0].Preco)
</td>
<td>
@Html.DisplayFor(model => item.cliente.NomeCliente)
</td>
</tr>
}
</table>
</fieldset>
Action da Index
public ActionResult Index()
{
return View(unitOfWork.PedidoRepository.Pedidos);
}
class UnitOfWork
public PedidoRepository PedidoRepository
{
get
{
if (pedidoRepository == null)
{
pedidoRepository = new PedidoRepository(context);
}
return pedidoRepository;
}
}
RequestRepository.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ProjetoZeus.Models
{
public class PedidoRepository
{
private bool disposed = false;
private Contexto context;
public PedidoRepository(Contexto context)
{
this.context = context;
}
public void Salva()
{
context.SaveChanges();
}
public void Adiciona(Pedido pedido)
{
context.Pedidos.Add(pedido);
}
public Pedido Busca(int id)
{
return context.Pedidos.Find(id);
}
public void Remove(int id)
{
Pedido pedido = Busca(id);
context.Pedidos.Remove(pedido);
}
public List<Pedido> Pedidos
{
get
{
return context.Pedidos.ToList();
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
}
}