Usuário com melhor resposta
Dois models uma view

Pergunta
-
Boa tarde pessoal!
Estou tentando implementar dois Models em uma View, e fazendo uma pesquisa, vi que o pessoal costuma fazer isso com ViewModel. Porém não estou conseguindo referenciar o segundo foreach. O erro é o "Referência de objeto não definida para uma instância de um objeto." Alguém sabe o por que esta dando esse erro? Devo estar instanciando errado no controller, mas então como é a forma correta?
Model
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Taitell_Telecom.Models { public class ProdutoViewModel { public ProdutoViewModel(IEnumerable<Produto> Produtos, IEnumerable<ProdutoCategoria> Categoria) { this.Produtos = Produtos; this.Categorias = Categorias; } public IEnumerable<Taitell_Telecom.Models.ProdutoCategoria> Categorias { get; set; } public IEnumerable<Taitell_Telecom.Models.Produto> Produtos { get; set; } } }
View
@model Taitell_Telecom.Models.ProdutoViewModel @using Taitell_Telecom.Helpers @{ Layout = "~/Views/Shared/SiteLayout.cshtml"; ViewBag.Title = "VitrineProdutos"; } @foreach (var item in Model.Produtos) { <div class="produto"> <div class="produto_foto"> <a href="site/Produtos?id=@item.Id"> <img src="../../../Content/produtos_images/@item.ThumbImagem" alt="@item.Nome" /> </a> </div> <div class="produto_txt"> <h1><strong>@item.Nome</strong></h1> <a href="site/Produtos?id=@item.Id" class="link_produto"> <p>@Html.Raw(item.resume.Trunca(item.Descricao, 80))</p> </a> </div> </div> } @foreach (var categoria in Model.Categorias) { @Html.ActionLink(@categoria.Nome, "ListaProdutos", "Site", new { categoriaId = categoria.Id }, "") }
Controller
public ActionResult VitrineProdutos() { return View(new ProdutoViewModel(db.Produtos.AsEnumerable(), db.Categorias.ToList())); }
Não importa ao tempo o minuto que passa, mas o minuto que vem.
Respostas
-
Eu tive que ajudar um amigo esses dias mesmo com esse assunto. A minha sugestão é que se você quer que em uma página apareça dois foreachs com dois models porque não seguimentar deixando cada listaem em um modelview diferente?
Aqui tá o exemplo: https://skydrive.live.com/#cid=D772A349D58A380B&id=D772A349D58A380B%21344
(só baixar o zip com o nome de "multimodels")
Se ainda não conseguir fazer me avise.
Terei prazer em tentar te ajudar :)
Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)
Se quiser: mayumisatox@gmail.com ou @MayogaX- Marcado como Resposta Filipemd_s terça-feira, 7 de agosto de 2012 23:45
-
Grande.
Você consegue enviar o segundo Model (ou os 2 models) com ViewData..
ViewData["Produtos"] = Produtos ViewData["Categorias"] = Categorias
Coloque esteas dados no Controller e envie para a View.
Espero que ajude...
http://fparmezani.wordpress.com
- Marcado como Resposta Filipemd_s terça-feira, 7 de agosto de 2012 23:45
Todas as Respostas
-
Categoria e ProdutoCategoria não seriam entidades diferentes?
@Html.ActionLink(@categoria.Nome, "ListaProdutos", "Site", new { categoriaId = categoria.Categoria.Id }, "")
Você está tentando listar uma categoria mas pegando da tabela ProdutoCategoria, creio que o erro está aí.
-
Então, se eu fizesse isso realmente funcionaria, mas com o foreach desse jeito ele vai escrever toda vez que eu criar um novo produto, o nome da categoria. Quero que o nome da categoria apareça apenas uma vez, para cada categoria criada. Por isso a ideia de trabalhar dois models em uma view...
Não importa ao tempo o minuto que passa, mas o minuto que vem.
-
Eu tive que ajudar um amigo esses dias mesmo com esse assunto. A minha sugestão é que se você quer que em uma página apareça dois foreachs com dois models porque não seguimentar deixando cada listaem em um modelview diferente?
Aqui tá o exemplo: https://skydrive.live.com/#cid=D772A349D58A380B&id=D772A349D58A380B%21344
(só baixar o zip com o nome de "multimodels")
Se ainda não conseguir fazer me avise.
Terei prazer em tentar te ajudar :)
Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)
Se quiser: mayumisatox@gmail.com ou @MayogaX- Marcado como Resposta Filipemd_s terça-feira, 7 de agosto de 2012 23:45
-
Então, se eu fizesse isso realmente funcionaria, mas com o foreach desse jeito ele vai escrever toda vez que eu criar um novo produto, o nome da categoria.
Não entendi. Isso só aconteceria se você colocasse o laço (foreach) de categorias dentro da listagem de produtos.
-
Grande.
Você consegue enviar o segundo Model (ou os 2 models) com ViewData..
ViewData["Produtos"] = Produtos ViewData["Categorias"] = Categorias
Coloque esteas dados no Controller e envie para a View.
Espero que ajude...
http://fparmezani.wordpress.com
- Marcado como Resposta Filipemd_s terça-feira, 7 de agosto de 2012 23:45