blazor サーバー側アプリを作成していますが、2 つのカスタム コンポーネント間で値をバインドする際に問題があります。
bind または @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; }
}
入力テキストボックスに、親コンポーネントShortId
のオブジェクトが正しく表示されます。User
ただし、入力のテキストを変更し、メソッドSave
をトリガーして現在のオブジェクトを表示できるボタンをクリックすると、実際のプロパティでは変更が行われておらず、入力のみが変更されていることがわかります。ValidateUserData
User
User.ShortId
入力の変更がバインドされたプロパティに自動的に適用されるようにバインドする方法はありますか?
OnChanged
フォームに表示する必要があるこれらのプロパティがいくつかあるため、これらのプロパティごとにカスタム イベントをフックしたくないのです。