首页 > 解决方案 > 动态生成控件

问题描述

我有一个 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>
 }

同一页面顶部的代码

@code {
bool IsOpen1 { get; set; }
void onclick1(MouseEventArgs e)
{
    IsOpen1 = !IsOpen1;
    StateHasChanged();
}
}

我无法弄清楚如何生成这种类型的控件。我知道问题是所有控件的 onclick 都是相同的。即使我在 onclick="@popoverTextId" 中动态更改名称,我如何在@code {}中动态创建代码

标签: c#blazor

解决方案


我假设 Schedule 有一个 ID。否则,即兴创作一些东西。

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

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

推荐阅读