Array
(
)

Como eu faço um foreach em cima de uma ViewData na View.

Pjava
   - 22 set 2014

Essa é a minha controller:
#Código
public ActionResult Acao()
{
RupturaEntities db = new RupturaEntities();
var _listaUnidade = Enumerable.Empty<object>();
var _listaFamilia = Enumerable.Empty<object>();
var _listaProduto = Enumerable.Empty<object>();
var _listaCnpjDesc = Enumerable.Empty<object>();
var monta_arvore = db.Ruptura
.Where(m => m.IDMotivo != 7)
.Select(rup => new MontaArvoreAcao
{
IDRuptura = rup.IDRuptura,
DataRuptura = rup.DataRuptura,
IDMotivo = rup.IDMotivo,
Motivo = rup.Motivo.Motivo1,
IDOrigem = rup.IDOrigem,
CodigoPDV = rup.CodigoPDV,
UF = rup.PDV.UF,
Cidade = rup.PDV.Cidade,
CnpjDescricao = rup.PDV.Cnpj + " - " + rup.PDV.Descricao,
Codigo_Apresentacao = rup.Codigo_Apresentacao,
Unidade_Negocio = rup.Apresentacao.Unidade_Negocio,
Codigo_Unidade_Negocio = rup.Apresentacao.Codigo_Unidade_Negocio,
Franquia = rup.Apresentacao.Franquia,
Familia = rup.Apresentacao.Familia,
Descricao = rup.Apresentacao.Descricao
}).ToList().OrderBy(r => r.IDMotivo);
foreach (var _idmotivo in monta_arvore)
{
_listaUnidade = db.Apresentacao
.Where(un => un.Codigo_Unidade_Negocio == _idmotivo.Codigo_Unidade_Negocio)
.Select(u => new MontaArvoreAcao
{
Unidade_Negocio = u.Unidade_Negocio,
Codigo_Familia = u.Codigo_Familia
}).ToList().OrderBy(o => o.Unidade_Negocio);
}
ViewData["ListaUn"] = _listaUnidade.ToList();
foreach(var _idUn in monta_arvore)
{
_listaFamilia = db.Apresentacao
.Where(f => f.Codigo_Familia == _idUn.Codigo_Familia)
.Select(f => new MontaArvoreAcao
{
Familia = f.Familia,
Codigo_Familia = f.Codigo_Familia
}).ToList();
}
ViewData["ListaFam"] = _listaFamilia;
foreach(var _prod in monta_arvore)
{
_listaProduto = db.Apresentacao
.Where(p => p.Codigo_Apresentacao == _prod.Codigo_Apresentacao)
.Select(prod => new MontaArvoreAcao
{
Descricao = _prod.Descricao,
Codigo_Apresentacao = _prod.Codigo_Apresentacao
}).ToList();
}
ViewData["ListaProd"] = _listaProduto;
foreach(var cnpj in monta_arvore)
{
_listaCnpjDesc = db.PDV
.Where(c => c.CodigoPDV == cnpj.CodigoPDV)
.Select(x => new MontaArvoreAcao
{
CnpjDescricao = x.Cnpj + " - " + x.Descricao
}).ToList();
}
return View(monta_arvore.ToList());
}
[HttpPost]
public JsonResult CarregaCidades(string _uf)
{
RupturaEntities db = new RupturaEntities();
var resultado = (from _pdv in db.PDV
.Where(c => c.UF == _uf)
select new { _pdv.Cidade }).ToList().Distinct().OrderBy(o => o.Cidade);
return Json(new { resultado }, JsonRequestBehavior.AllowGet);
}

Essa é minha View onde quero o foreach
#Código
<div id='jqxWidget'>
<div style='float: left; width:auto;'>
<div id='jqxTree' style='visibility: hidden; float: left; margin-left: 20px;'>
@{
var _motivo = "";
var _un = ViewData["ListaUn"];
var _familia = "";
var _desc = "";
var _apr = "";
int _idmotivo = 0;
<ul>
@foreach (var item in Model)
{
if (_motivo != @item.Motivo)
{
_idmotivo = @item.IDMotivo;
<li item-checked='false' item-expanded='false'>
@item.Motivo

<ul>
@foreach (var un in (System.Collections.Generic.List<Ruptura.Models.MontaArvoreAcao>ViewData["ListaUn"]))
{
<li item-checked='false' item-expanded='false'>
@un.Unidade_Negocio
</li>
}
</ul>
</li>

}
_motivo = @item.Motivo;
}
</ul>
}
</div>
<div style='margin-left: 60px; float: left;'>
<div style='margin-top: 10px;'>
<input id='jqxCheckBox' type="hidden">
</div>
</div>
</div>
</div>

O que passa é que nessa linha dá erro no tipo:
#Código
@foreach (var un in (System.Collections.Generic.List<Ruptura.Models.MontaArvoreAcao>ViewData["ListaUn"]))

Afinal, qual o tipo que eu carrego no List?

Pjava
   - 22 set 2014

Eiso o erro:

Citação:

Mensagem de Erro do Compilador: CS0305: O uso de tipo 'System.Collections.Generic.List<T>' genérico requer argumentos de tipo 1

Pjava
   - 22 set 2014

Na busca por fazer funcionar, fiz essa alteração e não deu mais nenhum erro, porém não trago mais nada na minha página, nem o Motivo que estava sendo carregado diretamente, sem ViewData ou ViewBag. Antes funcionava. O meu BD está devidamente populado, não é falta de registro. É problema mesmo. No break com o Motivo tenho a informação, mas não tenho nada na página. Fiz assim: Um include na página e mudança no foreach.

meu include:

#Código@model IEnumerable<Ruptura.Models.MontaArvoreAcao>

meu foreach:

#Código@foreach (var un in (ViewData["ListaUn"] as IEnumerable<Ruptura.Models.MontaArvoreAcao>))

Pjava
   - 22 set 2014

Falei do break, mas me confundi com outra situação. Não entra no foreach. Coloquei um break e vi que não entra, ele pula direto.