我的剃须刀页上有这个:
@foreach (AanmeldingItem ai in Aanmeldingen.Aanmeldingen)
{
<NieuweAanmeldingScherm Aanmelding=@ai SL=@SL />
}组件"NieuweAanmeldingScherm“有一堆div和inputtexts来收集一些数据。在与前面相同的页面上,我有一个按钮来添加一个新项目。当我单击此按钮时,它将一个新的"AanmeldingItem“添加到"Aanmeldingen.Aanmeldingen”中,这是"AanmeldingItem“的列表。
我的问题是,当我输入一些数据时,它不会被更新到列表中的项中。
这在Blazor是如何工作的(我刚刚开始)?
所以基本上:
@foreach (MyClass myclass in MyClasses)
{
<MyComponent Myclass=@myclass />
}MyComponent:
<InputText @bind-value=@myclass.item1 />
<InputText @bind-value=@myclass.item2 />
@code
{
[parameter]
public MyClass myclass {get;set;}
}在包含foreach循环的页面上添加按钮:
<div class="form-control nieuwAanmeldItem" @onclick="NieuwItem" />我如何使它,以便MyClasses是更新的信息,从输入?
发布于 2022-09-18 23:27:17
您的循环缺少一个@key指令,它提供了一种在呈现时标识组件每个实例的方法。
@foreach (AanmeldingItem ai in Aanmeldingen.Aanmeldingen)
{
<NieuweAanmeldingScherm @key=ai Aanmelding=@ai SL=@SL />
}在这里,我使用了AanmeldingItem实例作为键,但是如果该类具有合适的唯一int,string或其他一些简单类型,则使用它代替它,因为这样会提高性能。
发布于 2022-09-19 07:00:12
我知道我做错了什么。
Mister Magoo的答案并不是真正需要的,但我还是实现了它。根据微软的说法,它应该会自动工作,但现在我确信它可以工作了。
问题是我重新初始化了"NieuwAanmeldingScherm“上的参数。这导致从父进程中切断与列表的链接。
所以我就是这么做的:
[Parameter]
public AanmeldingItem Aanmelding { get; set; }
protected override void OnInitialized()
{
Aanmelding = new AanmeldingItem();
base.OnInitialized();
}这是错误的,因为参数已经在父级中初始化了。
https://stackoverflow.com/questions/73766147
复制相似问题