Blazor не обновляет интерфейс, когда параметр передается с помощью функции onclick - PullRequest
1 голос
/ 20 июня 2019

В Blazor ServerSide Asp.net core 3.0 Preview 6 пользовательский интерфейс не обновляется. Я изменил counter.razor в качестве примера. Если вы нажмете кнопку «Установить счетчик на ...», счетчик не обновится. Когда вы нажимаете кнопку «Нажми меня» (без параметра), пользовательский интерфейс обновляется, и к предыдущему нажатию добавляется 1 счетчик.

Кнопки работают, но пользовательский интерфейс не обновляется.

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>
<br />

<p>
    <button class="btn btn-primary" @onclick="@IncrementCount">Click me</button>
</p>

    @for (int i = 0; i < 5; i++)
    {
        var a = i;
        <p><button class="btn btn-primary" onclick="@(() => test(a))">Set counter to @a</button></p>
    }

    @functions {
        int currentCount = 0;

        protected void IncrementCount()
        {
            currentCount++;
        }

        void test(int i)
        {
            currentCount = i;
        }
    }

Любые предложения, как это исправить или это ошибка в Blazor?

Ответы [ 2 ]

2 голосов
/ 20 июня 2019

Синтаксис @functions { } предполагает, что это было начато с Preview5, но в Preview6 (текущем) синтаксис для обработчиков событий изменился :

При указании обработчиков событий в Blazor теперь используется новая директива Синтаксис атрибута вместо обычного синтаксиса HTML. Синтаксис похож на синтаксис HTML, но теперь с лидирующим символом @. это отличает обработчики событий C # от обработчиков событий JS.

  <button @onclick="@Clicked">Click me!</button>

При указании делегата для обработчика событий C # префикс @ в настоящее время все еще требуется значение атрибута, но мы ожидаем уберите это требование в будущем обновлении.

Так что вам нужно @onclick="@(() => test(a))

0 голосов
/ 20 июня 2019

Атрибут onclick является директивой компилятора, и перед ним должен стоять символ @ . Кроме того, кнопка «Установить счетчик в @a» использует лямбадинское выражение, то есть, используя C #, и, насколько я помню, в этом была ошибка, которая, возможно, все еще существует.

Этот комментарий от разработчика команды Blazor от 5 июня об этом:

Я понимаю, что мы должны исправить @onclick, чтобы ожидать CSharp. Если что-нибудь иначе быть другим в приведенном выше списке?

Пожалуйста, используйте @code вместо @functions

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

...