EFCore+Razor Pages:嵌套的 foreach 循环遍历 .included 数据集返回零结果
EFCore+Razor Pages: nested foreach loop iterating over .included dataset returning zero results
我正在尝试制作一个由 EF 核心创建的 DotnetCore C# MVC Razor 页面显示相关 table 数据,并且似乎在我的页面模型 OnGetAsync 方法中或尝试显示 LINQ .include 时遇到问题Razor 页面中包含的内容。
如有任何帮助,我们将不胜感激。如果我可以提供更多相关信息,请告诉我。我只做了 EFCore/RazorPages/Mvc/C# 几个月了,所以请多多关照!
这是 index.cshtml.cs
页面,我在其中包含孩子 table:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Appname.Models;
namespace Appname.Pages.Request
{
public class IndexModel : PageModel
{
private readonly Appname.Models.dbContext _context;
public IndexModel(Appname.Models.dbContext context)
{
_context = context;
}
public IList<ParentTable> ParentTable { get;set; }
public async Task OnGetAsync()
{
ParentTable = await _context.ParentTable
.Include(w => w.ChildTable)
.ToListAsync(); //Output to an async list
}
}
}
}
这是 Index.cshtml
razor 页面,其中嵌套 foreach
循环遍历 Model.ParentTable[0].ChildTable
的条件永远不会满足,因为 Model.ParentTable[0].ChildTable
在期间检查时计数为零调试,因此不显示 ChildField1
或 ChildField2
的数据:
@page
@model Appname.Pages.Request.IndexModel
@{
ViewData["Title"] = "Index";
}
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.ParentTable[0].ParentField1)
</th>
<th>
@Html.DisplayNameFor(model => model.ParentTable[0].ParentField2)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.ParentTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ParentField1)
</td>
<td>
@Html.DisplayFor(modelItem => item.ParentField2)
</td>
<td>
<table class="table">
<tr>
<th>Child Field 1</th>
<th>Child Field 2</th>
</tr>
@foreach (var relatedItem in Model.ParentTable[0].ChildTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField2)
</td>
</tr>
}
</table>
</td>
<td>
<a asp-page="./Edit" asp-route-id="@item.ParentTableid">Edit</a> |
<a asp-page="./Details" asp-route-id="@item.ParentTableid">Details</a>
</td>
</tr>
}
</tbody>
</table>
这里是 ParentTable
模型:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Appname.Models
{
public partial class ParentTable
{
[Key]
public long ParentTableid { get; set; }
public string ParentField1 { get; set; }
public string ParentField2 { get; set; }
public ICollection<ChildTable> ChildTable { get; set; }
}
}
...还有 ChildTable
模型,使用 EF Core 的 non-standard ID 命名约定,因为这是很久以前编写的数据库中字段的设计方式(不是确定这是问题的一部分还是我的关键字段设置错误):
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Appname.Models
{
public partial class ChildTable
{
public long nonstandardidfield { get; set; }
public string ChildField1 { get; set; }
public string ChildField2 { get; set; }
[ForeignKey("nonstandardidfield")]
public ParentTable ParentTable { get; set; }
}
}
感谢您的宝贵时间。
在我看来,您只是每次迭代第一个模型的 ChildTable 项目。
改变这个:
@foreach (var relatedItem in Model.ParentTable[0].ChildTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField2)
</td>
</tr>
}
收件人:
@foreach (var relatedItem in item.ChildTable)
{
<tr>
<td>
@Html.DisplayFor(ri => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(ri => relatedItem.ChildField2)
</td>
</tr>
}
我正在尝试制作一个由 EF 核心创建的 DotnetCore C# MVC Razor 页面显示相关 table 数据,并且似乎在我的页面模型 OnGetAsync 方法中或尝试显示 LINQ .include 时遇到问题Razor 页面中包含的内容。
如有任何帮助,我们将不胜感激。如果我可以提供更多相关信息,请告诉我。我只做了 EFCore/RazorPages/Mvc/C# 几个月了,所以请多多关照!
这是 index.cshtml.cs
页面,我在其中包含孩子 table:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Appname.Models;
namespace Appname.Pages.Request
{
public class IndexModel : PageModel
{
private readonly Appname.Models.dbContext _context;
public IndexModel(Appname.Models.dbContext context)
{
_context = context;
}
public IList<ParentTable> ParentTable { get;set; }
public async Task OnGetAsync()
{
ParentTable = await _context.ParentTable
.Include(w => w.ChildTable)
.ToListAsync(); //Output to an async list
}
}
}
}
这是 Index.cshtml
razor 页面,其中嵌套 foreach
循环遍历 Model.ParentTable[0].ChildTable
的条件永远不会满足,因为 Model.ParentTable[0].ChildTable
在期间检查时计数为零调试,因此不显示 ChildField1
或 ChildField2
的数据:
@page
@model Appname.Pages.Request.IndexModel
@{
ViewData["Title"] = "Index";
}
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.ParentTable[0].ParentField1)
</th>
<th>
@Html.DisplayNameFor(model => model.ParentTable[0].ParentField2)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.ParentTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ParentField1)
</td>
<td>
@Html.DisplayFor(modelItem => item.ParentField2)
</td>
<td>
<table class="table">
<tr>
<th>Child Field 1</th>
<th>Child Field 2</th>
</tr>
@foreach (var relatedItem in Model.ParentTable[0].ChildTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField2)
</td>
</tr>
}
</table>
</td>
<td>
<a asp-page="./Edit" asp-route-id="@item.ParentTableid">Edit</a> |
<a asp-page="./Details" asp-route-id="@item.ParentTableid">Details</a>
</td>
</tr>
}
</tbody>
</table>
这里是 ParentTable
模型:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Appname.Models
{
public partial class ParentTable
{
[Key]
public long ParentTableid { get; set; }
public string ParentField1 { get; set; }
public string ParentField2 { get; set; }
public ICollection<ChildTable> ChildTable { get; set; }
}
}
...还有 ChildTable
模型,使用 EF Core 的 non-standard ID 命名约定,因为这是很久以前编写的数据库中字段的设计方式(不是确定这是问题的一部分还是我的关键字段设置错误):
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Appname.Models
{
public partial class ChildTable
{
public long nonstandardidfield { get; set; }
public string ChildField1 { get; set; }
public string ChildField2 { get; set; }
[ForeignKey("nonstandardidfield")]
public ParentTable ParentTable { get; set; }
}
}
感谢您的宝贵时间。
在我看来,您只是每次迭代第一个模型的 ChildTable 项目。
改变这个:
@foreach (var relatedItem in Model.ParentTable[0].ChildTable)
{
<tr>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(modelItem => relatedItem.ChildField2)
</td>
</tr>
}
收件人:
@foreach (var relatedItem in item.ChildTable)
{
<tr>
<td>
@Html.DisplayFor(ri => relatedItem.ChildField1)
</td>
<td>
@Html.DisplayFor(ri => relatedItem.ChildField2)
</td>
</tr>
}