如何将对象内的对象从Controller传递给视图?

时间:2015-10-28 17:53:10

标签: c# asp.net-mvc model-view-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");
      }
}

我的对象p​​edido是好的...对象cliente ok ...但是当对象pedido进入视图索引...不知何故,对象内部的对象cliente丢失...

这是我的观点索引:

@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>

在视图中,唯一为null的是我的对象Cliente和我的列表。

2 个答案:

答案 0 :(得分:1)

我认为你真正需要的是

return View("Index", lista);

而不是

return RedirectToAction("Index")

将浏览器重定向到&#34;索引&#34;控制器的动作。

答案 1 :(得分:0)

代码行return RedirectToAction("Index");将用户重定向到您的Index视图(类型为HttpGet)。基于Index操作从DB中获取IEnumerable<ProjetoZeus.Models.Pedido>的假设。如果更新的DB值已更新&#39; Cliente&#39;然后它将为空。