Reset input field value if value is invalid in Blazor(如果Blazor中的值无效,则重置输入字段值)
本文介绍了如果Blazor中的值无效,则重置输入字段值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在for循环内绑定了一些文本字段。
<Input type="text" @onchange='(ChangeEventArgs e)=>DataChange(e,item)' value="@item.value" />
在这里,如果用户在输入字段中键入任何内容,我在DataChange函数中有一个自定义验证。
private void DataChange(ChangeEventArgs e, PnL pnl)
{
if(e.Value.ToString().Contains(10))
{
pnl.value = e.Value.ToString();
}
}
如果更改有效,则仅IA会为列表中的项目赋值。
但是如果无效,我需要将该值重置为原始。
我已尝试呼叫StateHasChange(),但无济于事。
有人能帮忙吗?
推荐答案
尝试此操作:
private async Task DataChange(ChangeEventArgs e, PnL pnl)
{
if(e.Value.ToString().Contains(10))
{
pnl.value = e.Value.ToString();
}
else
{
var tempValue = pnl.value;
pnl.value = string.Empty();
await Task.Yield();
pnl.value = tempValue;
}
}
这里发生的情况是这样的。
- 代码与
await Task.Yield同步运行。 - 此时
pnl.value为空字符串。 DataChange生成Blazor事件处理程序的执行,该处理程序将呈现操作加载到呈现器队列。- 产量允许渲染器为其渲染队列提供服务,并重新渲染组件。
pnl.value为空(与上次呈现不同),因此输入将在DOM中更新。 - 产出后的代码现在运行到完成,并将
pnl.value设置回其原始值。 DataChange完成,Blazor事件处理程序将第二个呈现操作加载到呈现器队列,该操作现在会在值再次更改时重新呈现输入。
在您的代码中,所有内容都同步运行。您可以调用StateHasChanged任意多次,渲染器只有在DataChange完成后才能获得运行其队列的任务时间。此时,呈现器仍然认为输入设置为pnl.value的原始值(不是编辑值),因此DOM不会更新。
有一篇关于CodeProject的更详细的文章-https://www.codeproject.com/Articles/5310624/Blazor-UI-Events-and-Rendering
这篇关于如果Blazor中的值无效,则重置输入字段值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如果Blazor中的值无效,则重置输入字段值
基础教程推荐
猜你喜欢
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
