ASP.NET MVC - 在 foreach 中使用剃刀视图显示计数

ASP.NET MVC - Show counts using razor view in foreach

下面是我的剃须刀代码

for (int i = 0; i < Model.physicians.Count; i++)
{ 
    <div>
        @Model.physicians[i].npi -- Count: 
    </div>
}

我有 table npipatients 如下:

npiId Patientname
1 a
1 b
2 c

我在剃刀视图中的输出是这样的

1 -- Count:2

2 -- Count:1

我需要编写 ajax 调用,但如何将 npiid 传递给 foreach 的 ajax 方法并将 npi 计数的结果分配给标签。

$.ajax({
    type: "POST",
    url: "/mycontroler/GetnpiDetails",
    dataType: "json",
    data: { "npiId": npiId },                    
    success: function (data) {


   }
});

根据我对你的问题的理解(如果我错了请纠正我),看起来你正试图用每个 Npi 记录触发 API 以获得(分组)计数。

在我看来,效率不高,假设有 100 条记录,您将调用 API 100 次。这将导致降低服务器性能(处理相同任务 100 次)以及数据库服务器(查询相同数据 100 次)。

相反,

您需要先通过 .GroupBy() npi 记录和 .Count() 对每个分组记录在 Controller 中进行 数据转换。

预期输出:

[
  { "npi": 1, "count": 2 },
  { "npi": 2, "count": 1 }
]

如前所述,使用 1 个 API 调用可以节省调用 m 时间的性能。

你需要做什么:

  1. 模型 - 使用模型 class 设计您想要的输出。
  2. 控制器 - 执行数据转换:按 npiId 分组。
  3. 视图 - 绑定来自控制器的值。

Model

public class GroupedNpiModel
{
    public int NpiId { get; set; }

    public int Count { get; set; }
}

Controller

public ActionResult Index()
{
    var data = new []
    {
        new { NpiId = 1, Patientname = "a" } ,
        new { NpiId = 1, Patientname = "b" } ,
        new { NpiId = 2, Patientname = "c" } 
    };
            
    var groupedNpi = data.GroupBy(x => x.NpiId)
        .Select(g => new GroupedNpiModel
        {
            NpiId = g.Key,
            Count = g.Count()
        })
        .ToList();
        
    return View(groupedNpi);
}

View

@model IEnumerable<HelloWorldMvcApp.GroupedNpiModel>

@foreach (var npi in Model)
{
    <div>
        @npi.NpiId -- @npi.Count
    </div>
}

Sample program on .NET Fiddle