none
Como acessar o conteúdo de uma viewBag? RRS feed

  • Pergunta

  • Bom dia galera, estou tendo uma dificuldade imensa em apresentar um conteudo de uma viewBag.....Vou expor todo o contexto.

    Tenho uma consulta linq desta forma:

    var user = (from u in db.BranchJobs
                               join uc in db.JobCalendars on u.JobCalendarsId equals uc.JobCalendarsId
                               where u.BranchId == id
                               select new
                               {
                                  Nome =  u.Name,
                                  Mondays = uc.Monday,
                                  Tuesdays = uc.Tuesday,
                                  Wednesdays = uc.Wednesday,
                                  Thursdays = uc.Thursday,
                                  Fridays = uc.Friday,
                                  Saturdays = uc.Saturday,
                                  Sundays = uc.Sunday
                              
                               }).ToList();
    
                    

    e atribuo a variavel user a uma viewBag, desta forma:

    ViewBag.Cargos = user;

    na minha view estou fazendo desta forma:

     @foreach(var escalas in ViewBag.Cargos)
     {
        <tr>
            <td> @escalas.Nome </td>            
       </tr>                   
     }                   

    só que nÃo consigo acessar as propriedades da viewBag.

    O conteúdo dela é este:

    var escalas = { Nome = Desenvolvedor, Mondays = True, Tuesdays = True, Wednesdays = True, Thursdays = True, Fridays = True, Saturdays = False, Sundays = False }

    alguem saberia como posso usar estes dados? Preciso que cada elemento fique em uma linha da tabela:

    quinta-feira, 6 de dezembro de 2012 13:18

Respostas

  • Não entendi muito bem.. se você precisa de uma tela para gravar escalas então é só utilizar essa classe que você criou para armazenar os dados no banco. Mas crie uma nova pergunta para isso já que se trata de outra dúvida :)

    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze sexta-feira, 7 de dezembro de 2012 15:18
    • Marcado como Resposta Fabio.Junio sexta-feira, 7 de dezembro de 2012 16:09
    sexta-feira, 7 de dezembro de 2012 15:18

Todas as Respostas

  • A ViewBag.Cargos é do tipo dynamic então você não terá o intellisense a menos que converta ela para um type, porêm no seu caso você está retornando uma lista de anonymous type então fica dificil converter a ViewBag.

    O que você poderia é retornar uma classe concreta para a viewbag:

    var user = (from u in db.BranchJobs
                               join uc in db.JobCalendars on u.JobCalendarsId equals uc.JobCalendarsId
                               where u.BranchId == id
                               select new User
                               {
                                  Nome =  u.Name,
                                  Mondays = uc.Monday,
                                  Tuesdays = uc.Tuesday,
                                  Wednesdays = uc.Wednesday,
                                  Thursdays = uc.Thursday,
                                  Fridays = uc.Friday,
                                  Saturdays = uc.Saturday,
                                  Sundays = uc.Sunday
                              
                               }).ToList();

    repare que eu deixei 'new User'.

    Fazendo isso você poderá converter sua ViewBag:

     @foreach(var escalas in (List<User>)ViewBag.Cargos)
     {
        <tr>
            <td> @escalas.Nome </td>            
       </tr>                   
     } 

    e assim você terá o intelissense.

    Se você não fizer assim você não conseguirá ver as propriedades de ViewBag.Cargos mas poderá usa-las normalmente.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    • Marcado como Resposta Fabio.Junio quinta-feira, 6 de dezembro de 2012 14:03
    • Não Marcado como Resposta Fabio.Junio sexta-feira, 7 de dezembro de 2012 14:06
    quinta-feira, 6 de dezembro de 2012 13:28
  • Amigo, o que seria esse User? Inseri ele aqui, e os campos Nome. Mondays......ficaram vermelhos(erro)
    quinta-feira, 6 de dezembro de 2012 13:39
  • User é um nome de exemplo..

    Você deve usar uma classe própria sua que represente esses dados.


    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 6 de dezembro de 2012 13:41
  • Mas estes dados sao uma associação de 2 classes, ou seja...BranchPeriod (id, nome.....) CalendarJobs( monday, sunday, thuesday.....), não tenho um modelo que represente este contexto desta forma.

    quinta-feira, 6 de dezembro de 2012 13:44
  • Então crie, não tem problema, ou você fica sem o intelissense(nesse caso tb não haveria problema).

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    • Marcado como Resposta Fabio.Junio quinta-feira, 6 de dezembro de 2012 14:03
    • Não Marcado como Resposta Fabio.Junio sexta-feira, 7 de dezembro de 2012 14:06
    quinta-feira, 6 de dezembro de 2012 13:45
  • mas nao me preocupo com o intelisence....so quero mesmo é popular a minha tabela com todos os dados da viewBag.....de repente tb, pode haver outra forma de fazer? tipo, nao criar essa view bag......sei lá.....só estou com receio de criar essa nova classe.....
    quinta-feira, 6 de dezembro de 2012 13:49
  • Murilo....muito obrigado pela sua atenção amigo.....deu certinho.......criei uma classe para representar o meu contexto, como vc disse e funcionou certinho....agora consigo acessa todas as propriedades que necessito.....Valew!
    quinta-feira, 6 de dezembro de 2012 14:03
  • Show :)

    http://www.linkedin.com/pub/murilo-kunze/44/191/455

    quinta-feira, 6 de dezembro de 2012 14:22
  • Murilo......pode me sanar outra duvida?

    Eu criei uma classe chamada escalas, que contem todos os atributos do contexto acima (união das duas tabelas), mas nao criei esta tabela fisica no banco, agora preciso, tanto excluir como criar novas escalas, e pelo que percebi deverei criar minhas views tipadas com o contexto da tabela escalas, mas como ela nao eh fisica (nao armazena dados), como vou fazer para criar uma nova escala?

    sexta-feira, 7 de dezembro de 2012 14:02
  • Não entendi muito bem.. se você precisa de uma tela para gravar escalas então é só utilizar essa classe que você criou para armazenar os dados no banco. Mas crie uma nova pergunta para isso já que se trata de outra dúvida :)

    http://www.linkedin.com/pub/murilo-kunze/44/191/455


    • Editado Murilo Kunze sexta-feira, 7 de dezembro de 2012 15:18
    • Marcado como Resposta Fabio.Junio sexta-feira, 7 de dezembro de 2012 16:09
    sexta-feira, 7 de dezembro de 2012 15:18