我正在用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。