Blazor复选框传递错误的数字



我正在用Blazor创建一个应用程序,我喜欢在其中有一个复选框组。我有一个选项列表要显示,我使用一个简单的for进行

@for (int i = 0; i < Choices?.Count(); i++)
{
<div class="checkbox-option">
<input type="checkbox" id="Name" name="Name" value="@(i + 1)"
@onchange="eventArgs => { CheckChanged(i, eventArgs.Value); } ">
<label for="@($"{ElementData.Name}-{i}")">@Choices[i]</label>
</div>
}
@code {
void CheckChanged(int index, object checkValue)
{
var i = item;
}
}

我希望index变量中的每个选项都有不同的值。当我开始调试时,我很惊讶,参数index总是相同的值,它是Choices的数字。

我不明白问题出在哪里。

更新

如果我更改代码,引入一个变量来存储数字i,它将按预期工作

@for (int i = 0; i < Choices?.Count(); i++)
{
var rtn = i;
<div class="checkbox-option">
<input type="checkbox" id="Name" name="Name" value="@(i + 1)"
@onchange="eventArgs => { CheckChanged(rtn, eventArgs.Value); } ">
<label for="@($"{ElementData.Name}-{i}")">@Choices[i]</label>
</div>
}
@code {
void CheckChanged(int index, object checkValue)
{
var i = item;
}
}

您缺少了一项重要的知识。

您的代码生成一个RenderFragment,它实际上并没有渲染组件。您的组件只是将RenderFragment堆叠到Renderer的队列中。Renderer在获得线程时间并更新UI时为该队列提供服务。

请参阅此答案(以及其他几个答案(以获得解释-对于循环未返回预期值-C#-Blazor

通常的做法是做您在第二个代码块中所做的事情,或者只使用foreach。

相关内容

  • 没有找到相关文章

最新更新