删除动态创建的组件总是从列表中删除最后一项

Jar*_*lak 5 .net c# blazor

我正在使用 Blazor WebAssembly 实现一个简单的海报板。使用 X 按钮删除任何卡片时,删除的始终是列表中的最后一个元素。

@foreach (var item in _cards)
{
    <div class="card-title">
        <input type="text" id="@item.TitleElementId" value="@item.Title" />
        <button class="btn-remove" @onclick="() => RemoveCard(item)">X</button>
    </div>
}
<button class="btn-add" @onclick="AddNewCard">+</button>

@code {
    private List<Card> _cards = new List<Card>();

    private void AddNewCard()
    {
        _cards.Add(new Card());
    }

    private void RemoveCard(Card card)
    {
        _cards.Remove(card);
        // Also tried _cards.RemoveAll(i => i.TitleElementId == card.TitleElementId);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*lak 2

我注意到只有在修改卡内某些输入的值后才会发生这种情况。

原来是值绑定的问题。我需要使用 Blazor 的@bind-""而不是默认的 html value=""。不幸的是我不知道为什么会发生这种情况。

所以而不是

<input type="text" value="item.Title"/>
Run Code Online (Sandbox Code Playgroud)

我改为

<input type="text" @bind="item.Title"/>
Run Code Online (Sandbox Code Playgroud)

一切都按预期进行。