我有一个包含大量输入字段的页面。它们的初始值来自从SQL服务器获取的模型。
每次用户更改其中一个输入字段中的值时,我都要将新值发送到SQL服务器。
我的第一个想法是使用onchange事件来触发sql更新,并使用@bind事件来更新模型。事实证明,Onchange和blazors的@bind不能一起工作,因为@bind已经实现了一个Onchange事件处理程序。
我目前的解决方案是将@bind设置为oninput事件。这是代码
<input @onchange="@(e => ValueChanged(e, "someid"))" @bind-value="@this.model.someValue" @bind-value:event="oninput" class="form-control form-control-sm border rounded" />
private void ValueChanged(ChangeEventArgs e, string id)
{
// Update the sql server
}
这样可以绕过这个问题。但它创造了大量的流量。对于用户在输入字段中输入的每一封信,都会向服务器发送一条消息,而不是一条消息。
有更好的方法来实现这一点吗
对于单行字符串输入,我通常使用Keyup事件来检查Enter。(我也可以添加一个提交按钮,以防用户在不点击回车键的情况下点击或退出(:
<input @onkeyup="ValueChanged" @bind="SomeText" />
@code {
string SomeText;
public async Task ValueChanged(KeyboardEventArgs e)
{
if (e.Code == "Enter")
{
// Do SQL stuff with SomeText
}
}
}