none
Retornar vários Lists no ActionResult Index() RRS feed

  • Pergunta

  • Boa noite, gente!

    Estou fuçando agora no MVC e estou com algumas dúvidas.

    Tenho uma Home, nela eu tenho vários boxs (divs) que lista uns vídeos, notícias, um slideshow com imagens, estas coisas. Tudo na Home.

    Eu fiz um teste e coloquei na public ActionResult Index(){} todo o código pra listar os vídeos e me retornar um return View(lista) e na cshtml eu tenho um @foreach (var item in Model){} que me lista todos os vídeos que o controller me retornou, certo? Tudo funciona.

    Mas pelo o que eu estou entendendo, quando uma página é executada somente o método index é executado, como se fosse o método Load() do aspx, certo?

    Mas como eu disse, eu tenho que listar vídeos, fotos, notícias e outras coisas de uma só vez quando o usuário acessar a Home.

    Como eu faço pro método Index() mandar pra View vários Models pra eu listar na cshtml?


    Danilo Oliveira www.coffeeandcodes.com.br

    quinta-feira, 14 de março de 2013 00:39

Respostas

  • Boa noite Danilo,

    você pode usar ViewBag

            public ActionResult Index()
            {
                IList<string> lista = new List<string>();
                lista.Add("Texto1");
                lista.Add("Texto2");
                lista.Add("Texto3");
                ViewBag.MinhaLista = lista;
                ViewBag.Texto = "ASP.NET MVC";
                return View();
            }

    cshtml

    @ViewBag.Texto <br />
    @foreach (var item in ViewBag.MinhaLista)
    {
        @item <br />
    }

    existe também ViewData

    quinta-feira, 14 de março de 2013 01:24
    Moderador

Todas as Respostas

  • Boa noite Danilo,

    você pode usar ViewBag

            public ActionResult Index()
            {
                IList<string> lista = new List<string>();
                lista.Add("Texto1");
                lista.Add("Texto2");
                lista.Add("Texto3");
                ViewBag.MinhaLista = lista;
                ViewBag.Texto = "ASP.NET MVC";
                return View();
            }

    cshtml

    @ViewBag.Texto <br />
    @foreach (var item in ViewBag.MinhaLista)
    {
        @item <br />
    }

    existe também ViewData

    quinta-feira, 14 de março de 2013 01:24
    Moderador
  • Danilo, o médtodo "GET" é quando vc carrega a página, assim como o evento "Load" do WebForms. No caso da Index, por ser apenas uma página que "carrega", ela irá ter apenas o método GET, mas se vc notar no Create vai ter o método "Post" que é quando uma página recebe um Submit.

    Para carregar listas segui o conselho do Wellington. Após carregar um ViewBag vc pode exibir sua lista da forma que desejar na view, através de uma dropdown, webgrid ou carregar em um for each.


    Paulo Marcelo Dalbosco

    quinta-feira, 14 de março de 2013 11:25
  • Obrigado pelo retorno, Welington.

    Eu tinha resolvido de outra forma, mas a forma que você me mostrou é bem menos complicada. 
    Eu tinha feito o seguinte:

    Criei uma Model com as listas que eu ia armazenar e na Controller eu coloquei:

    var model = new HomeModel();
    model.ListaVideo = ListaVideoHome();
    model.ListaNoticia = ListaNoticiaHome();
    
    return View(model);

    Na View fica quase a mesma coisa, no lugar de ViewBag.ListaVideo fica @model.ListaVideo.

    Acho que a diferença entre um e outro é mais arquitetônica mesmo.

    Vlw!


    Danilo Oliveira www.coffeeandcodes.com.br

    quinta-feira, 14 de março de 2013 19:10