Blazor - кнопки в динамически генерируемой таблице - PullRequest
0 голосов
/ 01 ноября 2019

У меня небольшая проблема с таблицей, кнопки и onclick работают нормально, но параметр, который я хочу передать нажатием, не работает так, как я ожидаю.

вот код.

<table class="table-spaced table-responsive">
    <thead>
        <tr>
            <th />
            @for (int i = 1; i <= Plate.PlateType.NumberOfColumns; i++)
            {
                <th class="cell_head">@i</th>
            }
        </tr>
    </thead>
    <tbody>
        @for (int y = 0; y < Plate.PlateType.NumberOfRows; y++)
        {
            <tr>
                <td style="vertical-align:central">
                    @Helper.RowLetters[y]
                </td>
                @for (int x = 1; x <= Plate.PlateType.NumberOfColumns; x++, Position = string.Format("{0:c}{1:d2}", Helper.RowLetters[y], x))
                {
                    if (Plate.Compounds.ContainsKey(string.Format("{0:c}{1:d2}", Helper.RowLetters[y], x)))
                    {
        ---->           <td class="compound"><button type="button" class="compound" @onclick="() => PlateGridClick(Position)" itemprop="@string.Format("{0:c}{1:d2}", Helper.RowLetters[y], x))"/></td>
                    }
                    else
                    {
                        <td class="no_compound" />
                    }
                }
            </tr>
        }
    </tbody>
</table>

таблица, например, имеет размер P24, Position всегда P25, независимо от того, какую кнопку я нажимаю, мне нужно значение Position, когда создается эта конкретная ячейка, но Position, кажется, устанавливается, когдаЯ нажимаю кнопку, когда вся таблица уже создана и координаты достигли конца.

есть способ добиться той же функциональности, что и событие click, в блазоре, но при этом параметр сохраняется в кнопкевместо извлечения текущего значения параметра Position при нажатии?

1 Ответ

2 голосов
/ 01 ноября 2019

Я считаю, что это результат использования цикла for.

Попробуйте: определите локальную переменную в цикле for и присвойте значение локальной переменной необходимому коду.

Пример кода для пояснения того, что я имею в виду:

Этот цикл создает 10 элементов кнопки со значением 10, переданным методу ShowPosition. Значение 10 передается в метод ShowPosition независимо от того, какую кнопку вы нажимаете. 10 - это значение i, когда цикл for заканчивается. Это способ не делать это

 @for (int i = 0; i < 10; i++)
    {
        <button type="button" @onclick="() => ShowPosition(i)">Click</button> 
    }

Для того, чтобы сделать это правильно, вы должны создать локальную переменную, подобную следующей

 @for (int i = 0; i < 10; i++)
 {
     var local_i = i;

     <button type="button" @onclick="() => ShowPosition(local_i)">Click</button>
        }

Теперь, когда вы нажимаете кнопку управления,Вы получите правильное значение.

Пожалуйста, найдите полный ответ с объяснением того, как методы lambada ведут себя с пользователем Исаак . Это я.

Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...