none
View com 2 tipo RRS feed

  • Pergunta

  • Estou começando a estudar mvc, e estou com um problema.

    Preciso ter 2 listas de objetos de tipos diferentes em uma mesma view, mas até onde eu sei, a view só pode ter um tipo

    Como posso resolver esse problema sem ser por viewbag?

    Abraço

    domingo, 1 de dezembro de 2013 17:24

Todas as Respostas

  • Você pode fazer um FACADE:

    Assim:

    Classes que serão utilizados no Modelo

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace WebMVCExemplos.Models
    {
        public class Pessoas
        {
            public int Id { get; set; }
            public string Nome { get; set; }
        }
        public class Automovel
        {
            public int Id { get; set; }
            public string Descricao { get; set; }
            public int Ano { get; set; }
        }
        public class Listas
        {
            public Pessoas Pessoa { get; set; }
            public Automovel Automovel { get; set; }
        }
    }

    Chamando elas no Controller

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using WebMVCExemplos.Models;
    
    namespace WebMVCExemplos.Controllers
    {
        public class ListaController : Controller
        {
            //
            // GET: /Lista/
            public ActionResult Index()
            {
                Pessoas Pessoa = new Pessoas() { Id = 1, Nome = "Pessoa 1" };
                Automovel Automovel = new Automovel() { Id = 1, Descricao = "Fusca", Ano = 1995 };
                Listas Lista = new Listas();
                Lista.Pessoa = Pessoa;
                Lista.Automovel = Automovel;
                return View(Lista);
            }
    	}
    }

    Sua View vai ser tipado como Listas

    @model WebMVCExemplos.Models.Listas
    
    @{
        ViewBag.Title = "Index";
        WebMVCExemplos.Models.Pessoas Pessoas = Model.Pessoa;
        WebMVCExemplos.Models.Automovel Automovel = Model.Automovel;
    }
    
    <h2>Index</h2>
    
    <div>
        <h4>Listas</h4>
        <hr />
        <div class="dl-horizontal">
            <div>@string.Format("{0} - {1}", Pessoas.Id, Pessoas.Nome)</div>
            <div>@string.Format("{0} - {1} - {2}", Automovel.Id, Automovel.Descricao, Automovel.Ano)</div>
        </div>
    </div>


    Mas, pode ser tornar inconveniente se isso for uma prática em todos os seus Controller pela parte performática da coisa ...

    A ViewBag ou ViewData são facilmentes tipadas na View ... !!!

    Assim (Obs: Seguindo as mesmas classes do exemplo acima)

    public ActionResult Index2()
    {
    	Pessoas Pessoa = new Pessoas() { Id = 1, Nome = "Pessoa 1" };
    	Automovel Automovel = new Automovel() { Id = 1, Descricao = "Fusca", Ano = 1995 };
    	
    	ViewBag.Pessoa = Pessoa;
    	ViewBag.Automovel = Automovel;
    
    	return View();
    } 

    Perceba que a Index2 não tem nem model padrão!!!

    View dessa Index2

    @{
        ViewBag.Title = "Index2";
        WebMVCExemplos.Models.Pessoas Pessoas = (WebMVCExemplos.Models.Pessoas)ViewBag.Pessoa;
        WebMVCExemplos.Models.Automovel Automovel = (WebMVCExemplos.Models.Automovel)ViewBag.Automovel;
    }
    <h2>Index2</h2>
    <div>
        <h4>Listas</h4>
        <hr />
        <div class="dl-horizontal">
            <div>@string.Format("{0} - {1}", Pessoas.Id, Pessoas.Nome)</div>
            <div>@string.Format("{0} - {1} - {2}", Automovel.Id, Automovel.Descricao, Automovel.Ano)</div>
        </div>
    </div>
    OK!


    Fulvio Cezar Canducci Dias

    segunda-feira, 2 de dezembro de 2013 11:48
  • Concordo com o Fúlvio, porem, para o meu sistema eu achei mais conveniente fazer a utilização de Views Parciais(PartialView).

    http://imasters.com.br/artigo/24124/dotnet/asp-net-mvc-3-apresentando-partial-views/

    http://stackoverflow.com/questions/13934671/using-partial-views-in-asp-net-mvc-4

    Espero que ajude. 

    Abraço.


    Voce pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direcao by Steve Jobs

    segunda-feira, 2 de dezembro de 2013 11:52
  • Concordo com o Fúlvio, porem, para o meu sistema eu achei mais conveniente fazer a utilização de Views Parciais(PartialView).

    http://imasters.com.br/artigo/24124/dotnet/asp-net-mvc-3-apresentando-partial-views/

    http://stackoverflow.com/questions/13934671/using-partial-views-in-asp-net-mvc-4

    Espero que ajude. 

    Abraço.


    Voce pode encarar um erro como uma besteira a ser esquecida, ou como um resultado que aponta uma nova direcao by Steve Jobs

    O PartialView não vai trazer aquilo que ele pergunto, porque, o interesse dele é colocar mais que um model dentro de uma mesma view! 

    Fulvio Cezar Canducci Dias

    segunda-feira, 2 de dezembro de 2013 12:10