You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ将同一模型解析到页面的两个不同区域

按人员分组展示的实现方案

当然可以用LINQ实现你的需求,这里提供两种可行的做法:

方案一:视图内直接用LINQ筛选

直接在循环前通过LINQ的Where方法过滤模型数据,分别提取办公和外勤人员:

办公人员区域

<h3>办公人员</h3>
<ul>
    @foreach (var item in Model.Where(s => s.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>

外勤人员区域

<h3>外勤人员</h3>
<ul>
    @foreach (var item in Model.Where(s => s.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>

方案二:后端提前分组(更推荐)

如果想遵循MVC关注点分离的原则,建议在Controller层提前处理数据分组,再传递给视图渲染:

后端Controller代码

public IActionResult Index()
{
    // 假设_staffService是你获取人员数据的服务
    var allStaff = _staffService.GetAllStaff();
    var groupViewModel = new StaffGroupViewModel
    {
        OfficeStaff = allStaff.Where(s => s.GroupName == "Office").ToList(),
        FieldStaff = allStaff.Where(s => s.GroupName == "Field").ToList()
    };
    return View(groupViewModel);
}

定义对应的ViewModel类

public class StaffGroupViewModel
{
    public List<Staff> OfficeStaff { get; set; } = new List<Staff>();
    public List<Staff> FieldStaff { get; set; } = new List<Staff>();
}

视图中使用分组后的数据

<h3>办公人员</h3>
<ul>
    @foreach (var item in Model.OfficeStaff)
    {
        <li>
            <a class="nav-link text-dark" asp-area="" asp-controller="Staff" asp-action="Index">
                @Html.DisplayFor(modelItem => item.Name)
            </a>
        </li>
    }
</ul>

<h3>外勤人员</h3>
<ul>
    @foreach (var item in Model.FieldStaff)
    {
        <li>
            <a class="nav-link text-dark" asp-area="" asp-controller="Staff" asp-action="Index">
                @Html.DisplayFor(modelItem => item.Name)
            </a>
        </li>
    }
</ul>

方案对比

  • 方案一实现简单快速,但把数据筛选逻辑放在视图里,违反了MVC视图只负责渲染的设计原则,后期维护起来不够清晰。
  • 方案二将数据处理逻辑放在后端,视图只专注于展示内容,代码结构更合理,扩展性和维护性更强,是更推荐的做法。

内容的提问来源于stack exchange,提问作者Gary Whitcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:22:37