我正在尝试创建一个具有两个不同区域的页面。一个区域供办公室人员使用,另一个区域供现场人员使用。我不知道如何使用相同的模型来做到这一点。
我可以使用:
<ul>
@foreach (var item in Model)
{
<li> <a class="nav-link text-dark" asp-area="" asp-controller="Staff" asp-action="Index"> @Html.DisplayFor(modelItem => item.Name)</a></li>
}
</ul>
但这会将所有项目放入无序列表中。我想将它们隔离为仅具有“Office”的 GroupName 属性值
然后,我想在同一页面上执行完全相同的操作,查找 GroupName 属性值为“Field”的项目。
这是需要在 Linq 中完成的事情吗?如果是这样,怎么办?或者有更好的方法吗?
尝试重复该块并为每个块添加一个
.Where()
条件,例如:
<ul>
@foreach (var item in Model.Where(item => item.GroupName == "Office"))
{
<li> <a class="nav-link text-dark" asp-area="" asp-controller="Staff" asp-action="Index"> @Html.DisplayFor(modelItem => item.Name)</a></li>
}
</ul>
<ul>
@foreach (var item in Model.Where(item => item.GroupName == "Field"))
{
<li> <a class="nav-link text-dark" asp-area="" asp-controller="Staff" asp-action="Index"> @Html.DisplayFor(modelItem => item.Name)</a></li>
}
</ul>
如果
Model
是延迟执行IQueryable<>
或IEnumerable<>
,则在上面的代码中它将被评估两次。为了避免这种情况,您可以首先使用 var ItemList = Model.ToList();
强制执行一次,并将这些结果用作源。