首页 > 解决方案 > 试图在同一视图上显示来自同一模型的两个不同的数据表

问题描述

我正在尝试使用 MVC 在同一视图页面中将来自单个模型的数据显示为两个不同过滤的表。

我可以让第一个表完美地工作,但是第二个表过滤了第一个表中已经过滤的数据。

所以示例原始数据类似于

鲍勃,10 岁,伦敦比尔,12 岁,巴黎鲍勃,10 岁,纽约

我想要一张桌子

比尔,12 鲍勃,10

和伦敦巴黎纽约的单独表

但我得到的是伦敦巴黎的第二张桌子

第一个表的代码如下

  <tbody>
            @foreach (var item in Model.Select(p => new { p.PlayerId, p.Position, p.Name, p.RankScore, p.CompsPlayed }).OrderBy(p=>p.Position).Distinct())
        {
            <tr>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Position)
                </td>
                <td>
                    <a asp-action="Index" asp-controller="PlayerResults" asp-route-playerid="@item.PlayerId"> @Html.DisplayFor(modelItem => item.Name)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.PlayerId)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.RankScore)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompsPlayed)
                </td>

            </tr>
    }
        </tbody>

第二张桌子就像

            @foreach (var item in Model.Select(c => new { c.Comp, c.CompID, c.Players, c.Old }).Where(o => o.Old == false).Distinct())
        {
            <tr>
                <td class="text-center">
                    <a asp-action="Index" asp-controller="CompResults" asp-route-id="@item.CompID"> @Html.DisplayFor(modelItem => item.Comp)</a>
                </td>

                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.CompID)
                </td>
                <td class="text-center">
                    @Html.DisplayFor(modelItem => item.Players)
                </td>

            </tr>
    }
        </tbody>

所以我很确定与第一次过滤不同的是第二次过滤。

任何建议如何在两个表之间重置?

或者更好的方式来获取数据。

我知道换一种观点会更好..但这不是老板想要的

标签: c#asp.net-coremodel-view-controller

解决方案


这是一个简单的工作演示,您可以参考并修改您的代码:

模型

public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    [Display(Name ="First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    public string FullName { get; set; }
    public int Age { get; set; }

    public string Position { get; set; }
}

看法

@model IEnumerable<Demo1.Models.User>

<h2>Table1</h2>

<table class="table">
  <thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.FullName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Age)
        </th>

        <th></th>
    </tr>
  </thead>
  <tbody>
    @foreach (var item in Model.OrderBy(p=>p.Position).Select(p => new { p.FullName, p.Age}).Distinct())
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.FullName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Age)
            </td>
        </tr>
    }
  </tbody>
</table>

<h2>Table2</h2>

<table class="table">
  <thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Position)
        </th>
        <th></th>
    </tr>
  </thead>
  <tbody>
    @foreach (var item in Model.Select(p => new { p.Position }).Distinct())
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Position)
            </td>
        </tr>
    }
  </tbody>
</table>

结果

在此处输入图像描述


推荐阅读