【发布时间】:2021-03-08 13:28:03
【问题描述】:
在 Blazor 表单中,我希望能够检测表单值何时发生变化,并设置一个布尔值作为结果。
这里有一些代码来说明我目前是如何做到的:
<EditForm Model="Person" OnValidSubmit="OnSubmitValidateForm">
<div class="form-group">
<label>First Name</label>
<input type="text" value="@Person.FirstName" @onchange="OnFirstNameChanged" />
</div>
<div class="form-group">
<label>Surname</label>
<input type="text" value="@Person.Surname" @onchange="OnSurnameChanged" />
</div>
<input type="submit" class="btn btn-primary" value="Save"/>
</EditForm>
@code {
Person Person = new Person();
bool dataChanged = false;
void OnFirstNameChanged(ChangeEventArgs e)
{
Person.FirstName = e.Value.ToString();
dataChanged = true;
StateHasChanged();
}
void OnSurnameChanged(ChangeEventArgs e)
{
Person.Surname = e.Value.ToString();
dataChanged = true;
StateHasChanged();
}
}
在上面的表格中,我有两个字段——“FirstName”和“Surname”,它们是“Person”类的属性。每个属性都有一个输入文本框。每当任一文本框中的值发生更改时,都会调用相应的方法来更新属性值,并指示表单数据已更改。
为每个表单项设置一个事件处理程序似乎有些过分,因为在每种情况下,它真正所做的只是 @bind="" 所做的,加上将 dataChanged 设置为 true。
我的问题是,虽然这种方法有效,但似乎我必须编写很多额外的代码。有没有更好的方法来处理这个问题?
【问题讨论】:
-
也许你不需要那个布尔值?你真正想达到什么目标?
-
您正在这样做,就像您使用 react 一样。将您的值绑定到@bind-Value,而不是值
-
我想我的回答对你没有用,对吧?请不要害羞,告诉我们您在寻找什么。
-
@enet 非常有用,谢谢。直到现在我才得到改变来尝试它。它工作得非常出色。再次感谢。
标签: blazor