C# 动态生成控件

C# 动态生成控件,c#,blazor,C#,Blazor,我有一个foreach循环,需要创建一个按钮,允许用户获取特定位置的地址。问题是当页面生成时,如果单击任何按钮,它们都会显示弹出框 @foreach (var schedule in _schedules) { <BSButton Id="popover1" onclick="onclick1">@schedule.Location.NickName</BSButton> <BSPopover Target

我有一个foreach循环,需要创建一个按钮,允许用户获取特定位置的地址。问题是当页面生成时,如果单击任何按钮,它们都会显示弹出框

@foreach (var schedule in _schedules) {
     <BSButton Id="popover1" onclick="onclick1">@schedule.Location.NickName</BSButton>
     <BSPopover Target="popover1" IsOpen="@IsOpen1" Placement="Placement.Top">
         <BSPopoverHeader>@schedule.Location.Name</BSPopoverHeader>
         <BSPopoverBody>@schedule.Location.Address</BSPopoverBody>
     </BSPopover>
 }

我很难弄清楚如何生成这种类型的控件。我知道问题是所有控件的onclick都是相同的。即使我在onclick=“@popopovertextid”中动态更改名称,我如何在@code{}

中动态创建代码,我会假设时间表有一个Id。否则,即兴创作一些东西

 <BSButton @onclick="() => onclick1(schedule.Id)"> ... </BSButton>
    ....  IsOpen="@(schedule.Id == SelectedId)" ...

void onclick1(int scheduleId)
{
    SelectedId = scheduleId;
    //StateHasChanged();
}
。。。
....  IsOpen=“@(schedule.Id==SelectedId)”。。。
void onclick1(int scheduleId)
{
选择edid=scheduleId;
//StateHasChanged();
}

有没有“即兴创作”的理由?我通常会传递类@onclick=“()=>onclick1(schedule)”我缺少的东西?SelectedId=scheduleId应该做什么?为什么我们要注释掉StateHasChanged?
schedule.Id==SelectedId
是判断这是否为所选状态的条件。我无法从中获得完整的示例。@Orak-不直接,但由于某种原因重新加载_schedules时,事情可能会变得奇怪。旁白:始终对循环中的任何组件/元素使用
@key
指令,为渲染树差异代码提供一些标识每个项目的内容。
 <BSButton @onclick="() => onclick1(schedule.Id)"> ... </BSButton>
    ....  IsOpen="@(schedule.Id == SelectedId)" ...

void onclick1(int scheduleId)
{
    SelectedId = scheduleId;
    //StateHasChanged();
}