c# - Blazor WASM,自动更新数据更改
问题描述
我有一个 Blazor WASM 项目。index.razor 页面循环遍历对象数组(修复订单)并使用数组的每个元素构建一个表。表格的每一行包含 2 个 <select> 字段,因此可以直接从表格中更改每个对象的属性数据,而无需实际打开编辑页面。
当有人更改项目时,我正在使用 SignalR 自动更新所有连接的客户端。因此,当用户更改 <select> 选项时,我需要调用一个函数来更新数据库并发送 SignalR 消息
我在 <select> 中使用 @onselectionchange="() => SelectionChanged(ro)"。
我在 SelectionChanged(ro) 的入口处设置了一个断点。该应用程序永远不会从 @onselectionchange="() => SelectionChanged(ro)" 调用该函数。
我有什么选择才能让它工作?
表代码:
@foreach (var ro in repairOrders)
{
<tr>
<td>@ro.Tag</td>
<td>@ro.Control</td>
<td>@ro.Customer</td>
<td>
<select class="form-control" id="location" @bind="@ro.Location" @onselectionchange="() => SelectionChanged(ro)">
<option value="">Select Location</option>
@foreach(var loc in locationOptions)
{
<option value="@loc.Name">@loc.Name</option>
}
</select>
</td>
<td>
C#代码:
protected async Task SelectionChanged(RepairOrder _ro)
{
await Http.PutAsJsonAsync("api/RepairOrders/" + _ro.Id.ToString(), _ro);
if (IsConnected) await SendMessage();
}
解决方案
您的代码中只有一个小错误。
onselectionchange是用户选择文本时触发的事件。因此,您的方法未运行。
您可以改为选择 onchange 事件,例如
<select @bind="..."
@bind:event="oninput"
@onchange="(x) => SelectionChanged(to)" ...>
使用@bind:event="oninput"
Blazor 时,只要有内容更新,就会立即写回绑定。这是在之前触发@onchange
的,因此您的模型中已准备好更新的值。
推荐阅读
- python - Python 中的猜谜游戏不会打印 elseif
- autohotkey - AHK Loop 跟踪器和计时器
- javascript - 如何在 Javascript 中获取对象名称
- laravel - Laravel 5.4 返回 pdf 下载
- excel - 在 vba 中的 sumifs 上收到类型不匹配错误
- vuetify.js - 你如何控制 v-navigation-bar 的自动调整宽度?
- c++ - 动态分配的聊天数组打印丢失的数据并为空
- reactjs - React - 通过在父组件中包含组件的所有代码与不包含组件的不同之处
- php - 在用户创建时存储记住令牌
- vue.js - vue i18n 问题:当我运行我的代码时,它告诉我失败了