我正在用Razor页面在ASP.NET Core中编写一个应用程序。我正在尝试在一组表中显示一个数据集,每个人一个表(SubmittedBy),然后显示该人提交的表数据。
“我的剃须刀页面”看起来类似于以下内容(为简洁起见而减少)。
@foreach (var user in Model.TableList)
{
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.LoadTable.SubmittedBy): @Html.DisplayFor(modelItem => user.SubmittedBy)</th>
</tr>
<tr>
<th>@Html.DisplayNameFor(model => model.LoadTable.UID)</th>
...
...
...
</tr>
</thead>
<tbody>
@foreach (var item in Model.DataList)
{
<tr>
<th scope="row" class="text-center align-middle">
@Html.DisplayFor(modelItem => item.UID)
</th>
<td class="text-center align-middle">
@Html.DisplayFor(modelItem => item.Age)
</td>
...
...
...
</tr>
}
</tbody>
</table>
}
我正在使用LINQ创建列表并按如下方式填充表:
public IEnumerable<LoadTable> TableList;
public IEnumerable<LoadTable> DataList;
TableList = _context.LoadTable.Where(o => o.Approver == GetADDetails.displayName || o.Approver == GetADDetails.userName).GroupBy(user => user.SubmittedBy).Select(group => group.First()).ToList();
DataList = TableList.Where(p => TableList.Any(p2 => p2.SubmittedBy == p.SubmittedBy)).ToList();
寻找最终结果,如下所示:
我无法完全正确显示数据,并且缺少某些内容。谁能指出我正确的方向?
谢谢
答案 0 :(得分:0)
您绑定的模型错误。与其在代码中创建DataList
,不如在剃刀页面的内部foreach循环之前创建它(或在其之前发送空填充)
@foreach (var user in Model.TableList)
{
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.LoadTable.SubmittedBy): @Html.DisplayFor(modelItem => user.SubmittedBy)</th>
</tr>
<tr>
<th>@Html.DisplayNameFor(model => model.LoadTable.UID)</th>
...
...
...
</tr>
</thead>
<tbody>
@(var DataList=Model.TableList.Where(p=>p.SubmittedBy==user.SubmittedBy).ToList();)
@foreach (var item in DataList)
{
<tr>
<th scope="row" class="text-center align-middle">
@Html.DisplayFor(modelItem => item.UID)
</th>
<td class="text-center align-middle">
@Html.DisplayFor(modelItem => item.Age)
</td>
...
...
...
</tr>
}
</tbody>
</table>
}
答案 1 :(得分:0)
在我看来,您的两个查询可以合并和简化:只需参加这一部分:
_context
.LoadTable
.Where(o => o.Approver == GetADDetails.displayName || o.Approver == GetADDetails.userName)
.GroupBy(user => user.SubmittedBy);
这将返回IGrouping<TKey, TElement>
的集合。您可以遍历分组的集合,其中键是用户,值是与用户关联的项的集合。例如:
foreach (var userWithItems in Model.TableList)
{
var user = userWithItems.Key;
// TODO: Render the table per user here
foreach (var item in userWithItems)
{
// TODO: Render the items for the user here
}
}