我正在创建一个 Blazor 服务器端应用程序,并且在两个自定义组件之间绑定值时遇到问题。
我查看了多种示例,了解了 @bind 或绑定的工作方式,但是我无法弄清楚这方面的最新信息。
给定一个模型类 User:
public class User
{
[Mapping(ColumnName = "short_id")]
public string ShortId { get; set; }
public User()
{
}
}
我想建立一个表单,显示该用户的所有属性,并将它们显示在输入框中,以便进行编辑,并最终保存到数据库中。
我的表单(父组件)长这样:
<div class="edit-user-form">
<AnimatedUserInput TbText="@User.ShortId" Placeholder="MHTEE Id"/>
<button class="btn btn-secondary" @onclick="Hide" style="{display:inline-block;}">Back</button>
<button class="btn btn-primary" @onclick="SaveUser" style="{display:inline-block;}">Save</button>
</div>
@code {
[Parameter] public vUser User { get; set; }
[Parameter] public Action Hide { get; set; }
bool _error = false;
void SaveUser()
{
ValidateUserData();
}
void ValidateUserData()
{
_error = string.IsNullOrWhiteSpace(User.ShortId);
}
}
其中AnimatedUserInput
是一个自定义组件,长得像这样:
<div class="edit-area @FocusClass @WiggleClass">
<input type="text" @bind="@TbText" />
<span data-placeholder="@Placeholder"></span>
</div>
@code {
[Parameter]
public string TbText { get; set; }
[Parameter]
public string Placeholder { get; set; }
}
现在在输入文本框中,我可以正确地看到父组件中User
对象的ShortId
。
但是,如果我更改输入框中的文本并单击Save
按钮,该按钮会触发ValidateUserData
方法,并允许我查看当前User
对象,我会发现实际的User.ShortId
属性没有发生任何更改,只有在输入框中发生了更改。
有没有办法将它绑定起来,以便输入框中的更改会自动应用于绑定的属性?
我的一些属性需要在表单中显示,这就是为什么我不想钩接每个属性的自定义OnChanged
事件的原因。