Asp.net 查询显示错误
装载和显示此查询时出错Asp.net 查询显示错误,asp.net,entity-framework,asp.net-core,Asp.net,Entity Framework,Asp.net Core,装载和显示此查询时出错 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.Ven
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>
}
@foreach(ViewBag.Contas中的变量项)
{
@项目识别器
@项目1.1
@项目.观测
@项目:文西门托
@项目.基塔多
@项目1.DataPagamento
@项目1.ValorPago
}
错误是:
处理请求时发生未处理的异常。
RuntimeBinderException:“对象”不包含“Identificator”的定义
CallSite.Target(闭包、调用站点、对象)当迭代项
foreach(ViewBag.Contas中的var项)
时,项的类型是对象。默认情况下,对象没有属性。由于您使用的是匿名类型,因此可以将foreach更改为foreach(ViewBag.Contas中的动态项)
,这将允许您引用其属性,因为它将项
视为类似于ViewBag的动态对象。在razor pages 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();
}
公共类ContasViewModel
{
公共字符串标识符{get;set;}
公共字符串{get;set;}
公共字符串observaco{get;set;}
}
公共IList Contas{get;set;}
公共异步任务OnGetAsync()
{
Contas=wait_context.ContasReceber
.包括(x=>x.Pessoas)
.包括(x=>x.planosservices)
.选择(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>
}
@foreach(Model.Contas中的变量项)
{
@项目识别器
@项目1.1
@项目.观测
}
连续收到相同错误:处理请求时发生未处理的异常。RuntimeBinderException:“对象”不包含“Identificator”调用站点的定义。目标(闭包、调用站点、对象)实际上它不是控制器,而是asp.net razor中的“PageModel”。在这种情况下,无法识别“ViewBag”elento。您遇到了问题。一个常见的解决方案是创建一个“ViewModel”,其中包含要在该特定视图中使用的属性,并将实体属性投影到其中。AutoMapper在这方面做得很好。