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中的值无效,则重置输入字段值
基础教程推荐
猜你喜欢
- C# 从 List<List<int>> 中删除重 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- WPF 模态进度窗口 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
