【发布时间】:2021-09-09 19:43:12
【问题描述】:
我正在创建一个联系人管理数据库作为一个项目,并使用剃须刀页面创建了联系人和活动表。在单个联系人的页面上,我想返回与其 ID 相关的所有活动的列表,而不仅仅是单个活动。这是我的设置方式:
public Contact Contact { get; set; }
public List<Activity> Activity { get; set; }
public async Task<IActionResult> OnGetAsync(int? id)
{
if (id == null)
{
return NotFound();
}
Contact = await _context.Contact
.Include(c => c.Location)
.Include(c => c.Role)
.Include(c => c.State).FirstOrDefaultAsync(m => m.ContactID == id);
Activity = await _context.Activity
.Include(c => c.ActivityTask)
.Where(m => m.ContactID == id)
.ToListAsync();
if (Contact == null)
{
return NotFound();
}
return Page();
}
然后我调用每个项目显示如下:
<dt class="col-sm-2">
@Html.DisplayNameFor(model => model.Activity.Single().Status)
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Activity.Single().Status)
</dd>
显然 single 会抛出异常,但我不确定用什么替换它。我想可能是 Where() 或 FindAll() 但在我当前的设置中都不起作用。
【问题讨论】:
-
因为您使用
ActivityTask进行过滤,即.Include(c=>c.ActivityTask)可能最终只有一条记录。您是否根据活动检查了后端联系人的确切总记录? -
我成功地让单个活动出现,但是当添加任何其他活动时,由于我使用了 single() 而收到错误。我们显示的还有其他几个字段,我在这里复制了一个以供参考。此外,我在其中包含了活动任务,因为它是我想包含在结果中的另一个表中的一条数据。 Activitytask 是活动表上的外键。这有意义吗?
-
Include不过滤,它只填充导航属性。 -
请把整个页面显示出来好吗?
标签: c# entity-framework asp.net-core sequence razor-pages