以下代码适用于我:
@if (data == null)
{
<p><em>Loading...</em></p>
}
else
{
<button class="btn btn-primary" @onclick="Save">Save all changes</button>
<table class="table">
<thead>
<tr>
<th>Concern ID</th>
<th>CDC</th>
<th>Context</th>
<th>Reporting</th>
</tr>
</thead>
<tbody>
@foreach (var c in data)
{
<tr>
<td>@c.ConcernId</td>
<td><input type="checkbox" @bind="@c.PassingAllowed" /></td>
<td><input type="checkbox" @bind="@c.ContextPassingAllowed" /></td>
<td><input type="checkbox" @bind="@c.ReportingPassingAllowed" /></td>
</tr>
}
</tbody>
</table>
}
@code{
private ConcernData[] data;
protected override async Task OnInitializedAsync()
{
await GetData().ConfigureAwait(false);
}
private async Task GetData()
{
data = await Http.GetFromJsonAsync<ConcernData[]>("ConcernFilter").ConfigureAwait(false);
}
private async Task Save()
{
await Http.PostAsJsonAsync<ConcernData[]>("ConcernFilter/Update", data).ConfigureAwait(false);
}
private async Task Update(int concernId)
{
Console.Write(concernId);
}
}
但是,这会将所有数据(已更改和未更改)发送回服务器,我需要在该服务器中找出(或简单地逐个更新)哪些数据需要在数据库中更新。
感觉不对,因为我通过网络发送了太多数据并向数据库发送了太多更新语句(在本例中为 3 个)。
我可以想到几种方法来解决这个问题:
- 在客户端将更改后的列表与原始列表进行比较,仅将项目发送到真正需要更新的服务器。
- 找到一种方法在 Blazor 中为此类列表中的复选框编写如何调用 Update 方法并将正确的关注 ID 作为参数传递。
我正在寻求帮助来完成选项 2。