Передача аргумента переменной Blazor в функцию onclick - PullRequest
1 голос
/ 03 июня 2019

Я хочу передать int i в функцию onclick кнопки для каждого элемента списка. Я ожидал, что функция "clickItem" получит 0..2 для соответствующего элемента списка. Но оказалось, что он всегда получает 3 в качестве аргумента. Кажется, что переменная i в clickItem (i) не оценивается во время рендеринга цикла for. Я попытался изменить его на "clickItem (@i)", но он все тот же. Что я должен делать? (Я использую сервер Blazor, предварительный просмотр .net core 3 5)

        @for (int i = 0; i < 3; i++)
        {
            <li> item @i <button onclick=@(() => clickItem(i))>Click</button> </li>
        }

enter image description here

1 Ответ

1 голос
/ 03 июня 2019

Это классический, но немного новый в контексте Blazor.

Вам нужно сделать копию, потому что в противном случае лямбда 'захватывает' переменную цикла. С копией все в порядке.

@for (int i = 0; i < 3; i++)
{
    int copy = i;
    <li> item @i <button onclick=@(() => clickItem(copy))>Click</button> </li>
}
...