在安装和显示此查询时出现错误。
var itens = _context.ContasReceber
.Include(x => x.Pessoas)
.Include(x => x.PlanosServicos)
.Select(c => new
{
Identificador = c.Pessoas.NIdentificador,
NomePessoa = c.Pessoas.Nome,
c.Observacao,
c.Vencimento,
c.Valor,
c.Quitado,
c.DataPagamento,
c.ValorPago
})
.ToList();
ViewData["Contas"] = itens;
cshtml:
@foreach (var item in ViewBag.Contas)
{
<tr>
<th>
@item.Identificador
</th>
<th>
@item.NomePessoa
</th>
<th>
@item.Observacao
</th>
<th>
@item.Vencimento
</th>
<th>
@item.Quitado
</th>
<th>
@item.DataPagamento
</th>
<th>
@item.ValorPago
</th>
</tr>
}
错误是:
处理请求时发生未处理的异常。 RuntimeBinderException:“对象”不包含“ Identificador”的定义 CallSite.Target(Closure,CallSite,object)
答案 0 :(得分:1)
在剃须刀页面PageModel中,可以使用ViewModel返回自定义数据。 这是该演示的简化版本。
在cshtml.cs中:
public class ContasViewModel
{
public string Identificador { get; set; }
public string NomePessoa { get; set; }
public string Observacao { get; set; }
}
public IList<ContasViewModel> Contas { get; set; }
public async Task OnGetAsync()
{
Contas = await _context.ContasReceber
.Include(x => x.Pessoas)
.Include(x => x.PlanosServicos)
.Select(c => new ContasViewModel
{
Identificador = c.Pessoas.NIdentificador,
NomePessoa = c.Pessoas.Nome,
Observacao= c.Observacao
}).ToListAsync();
}
在cshtml中:
@foreach (var item in Model.Contas)
{
<tr>
<th>
@item.Identificador
</th>
<th>
@item.NomePessoa
</th>
<th>
@item.Observacao
</th>
</tr>
}
答案 1 :(得分:0)
遍历项目foreach (var item in ViewBag.Contas)
时,item
的类型为Object
。默认情况下,对象没有属性。由于您使用的是匿名类型,因此您可以将foreach更改为foreach (dynamic item in ViewBag.Contas)
,这将允许您引用其属性,因为它将item
视为类似于ViewBag的动态对象。