none
Dois models em uma única view. RRS feed

  • Pergunta

  • Boa noite Pessoal,

    Sou novato no framework MVC3, e estou tento alguns problemas.

    Tenho uma viu que é a master page, _Layout.cshtml.
    Nela eu carrego uma lista, Contadores.cs.
    Por causa disso, toda View que eu chamo, eu preciso passar essa lista, para que o Model funcione corretamente.

    public ActionResult Index()
            {
                List<Contadores> ltContadores = BDContadores.objDados.getAll();
                return View("Home", ltContadores);
            }
    O meu problema é quando eu preciso passar uma outra lista além dessa.
    Ele me retorna um erro dizendo que só um Model pode ser carregado por View.

    É possível passar múltiplos Models para uma única View?

    Obrigado

    segunda-feira, 24 de setembro de 2012 23:05

Respostas

  • Crie uma action separada e use @{RenderAction()} para reutilizar um model em várias views ou mesmo na Master Page.
    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 12:50
    segunda-feira, 24 de setembro de 2012 23:34
    Moderador
  • Porque você não deixa cada model em uma partialview diferente?

    Depois é só renderizar cada partial na master. é que o meu blog post com os detalhes de como se faz foi apagado, mas eu ainda tenho o exemplo pronto aqui, ó: https://skydrive.live.com/redir?resid=D772A349D58A380B!345


    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX


    • Editado Priscila Mayumi Sato terça-feira, 25 de setembro de 2012 11:48 Passar o link como link e não texto
    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 12:50
    terça-feira, 25 de setembro de 2012 11:48
  • Mas foi como eu disse, vc só pode ter um model por view. No caso tenha duas partialviews ou se for muito necessário vai precisar rever a modelagem das suas models para ver se uma lista não contém outra.

    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX

    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 14:00
    terça-feira, 25 de setembro de 2012 13:34
  • Nesse caso voce pode passar os dois objetos para a view usando ViewData ou ViewBag.

    Tudo que eh feito numa view convencional pode ser feito numa view utilizada com o RenderAction, outra alternativa eh criar um view model com suas listas, preencher e passar para a view em questao.

    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 14:00
    terça-feira, 25 de setembro de 2012 13:50
    Moderador

Todas as Respostas

  • Crie uma action separada e use @{RenderAction()} para reutilizar um model em várias views ou mesmo na Master Page.
    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 12:50
    segunda-feira, 24 de setembro de 2012 23:34
    Moderador
  • Porque você não deixa cada model em uma partialview diferente?

    Depois é só renderizar cada partial na master. é que o meu blog post com os detalhes de como se faz foi apagado, mas eu ainda tenho o exemplo pronto aqui, ó: https://skydrive.live.com/redir?resid=D772A349D58A380B!345


    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX


    • Editado Priscila Mayumi Sato terça-feira, 25 de setembro de 2012 11:48 Passar o link como link e não texto
    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 12:50
    terça-feira, 25 de setembro de 2012 11:48
  • Obrigado João_Prado e Priscila.

    Mas, o meu problema é quando vou enviar mais de uma lista para uma View.
    Retorna um erro que só é possível carregar um Model por View.

    Obrigado.
    terça-feira, 25 de setembro de 2012 12:53
  • Mas foi como eu disse, vc só pode ter um model por view. No caso tenha duas partialviews ou se for muito necessário vai precisar rever a modelagem das suas models para ver se uma lista não contém outra.

    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se precisar: @MayogaX

    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 14:00
    terça-feira, 25 de setembro de 2012 13:34
  • Nesse caso voce pode passar os dois objetos para a view usando ViewData ou ViewBag.

    Tudo que eh feito numa view convencional pode ser feito numa view utilizada com o RenderAction, outra alternativa eh criar um view model com suas listas, preencher e passar para a view em questao.

    • Marcado como Resposta Alexandre Maeda terça-feira, 25 de setembro de 2012 14:00
    terça-feira, 25 de setembro de 2012 13:50
    Moderador
  • Minha Master Page carrega toda vez uma lista.

    Isso significa que em toda View irei precisar chamar o Model em questão.

    Não há uma forma desse Model ser automaticamente carregado?
    terça-feira, 25 de setembro de 2012 14:04
  • João_ Prado,

    Consegui utilizando o ViewData.

    //HomeController
    
    public ActionResult Teste()
            {
                ViewData["Contadores"] = BDContadores.objDados.getAll();
                List<Equipe> ltEquipe = BDEquipe.objDados.getAll();
                return View("Teste", ltEquipe);
            }
    
    //View Master Page
    
    @foreach ( var item in (List<Contadores>)ViewData["Contadores"])
                            {            
                                ...
                            }
    

    Em toda nova Action, eu só preciso inserir o ViewData.

    Obrigado Cara!

    Um abraço.
    terça-feira, 25 de setembro de 2012 14:39
  • Concordo, 

    ViewData e tudo deve se resolver...


    http://fparmezani.wordpress.com

    domingo, 30 de setembro de 2012 22:03
  • Caro Fernando,

    Ao sugerir seu próprio post como resposta você está violando as regras do fórum. 

    É aceito que você mesmo responda sua pergunta apresentando a solução para o problema levantado mas não da maneira como você procedeu Ok?

    segunda-feira, 1 de outubro de 2012 21:58
    Moderador