These are my ViewData in controller:
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;
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());
}
As I do now in my View the foreac to traverse it and fill my page. Below my View.
@{
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 ViewData["ListaUn"])
{
<li item-checked='false' item-expanded='false'>
@item.Unidade_Negocio
</li>
@*}*@
}
</ul>
</li>
}
_motivo = @item.Motivo;
}
</ul>
}
What happens is that this line gives the type error:
@foreach (var un in (System.Collections.Generic.List<Ruptura.Models.MontaArvoreAcao>ViewData["ListaUn"]))
After all, what type do I load in the List?
Here is the error:
Mensagem de Erro do Compilador: CS0305: O uso de tipo 'System.Collections.Generic.List<T>' genérico requer argumentos de tipo 1
In the quest to make it work, I made this change and did not make any more mistakes, but I do not bring anything else on my page, nor the Reason that was being loaded directly, without ViewData or ViewBag. It used to work. My DB is properly populated, not a lack of registration. It's really a problem. I did so: An include in the page and change in foreach.
My include:
@model IEnumerable<Ruptura.Models.MontaArvoreAcao>
My foreach:
@foreach (var un in (ViewData["ListaUn"] as IEnumerable<Ruptura.Models.MontaArvoreAcao>))
Do not enter the foreach. I put a break and I saw that it does not enter, it jumps straight.