3

在 Blazor ServerSide Asp.net core 3.0 Preview 6 中,UI 不会刷新。我以 counter.razor 为例进行了更改。如果单击“将计数器设置为 ...”按钮,则不会刷新计数器。当您单击“单击我”按钮(没有参数)时,UI 会刷新,并且 1 会添加到先前单击的计数器中。

按钮似乎工作,但 UI 没有刷新。

@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 中的错误?

4

1 回答 1

3

语法表明这是从 Preview5 开始的 @functions { },但在 Preview6(当前)中,事件处理程序的语法发生了变化

在 Blazor 中指定事件处理程序现在使用新的指令属性语法而不是普通的 HTML 语法。语法类似于 HTML 语法,但现在有一个前导@字符。这使得 C# 事件处理程序不同于 JS 事件处理程序。

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

在为 C# 事件处理程序指定委托@时,属性值当前仍需要前缀,但我们希望在未来的更新中删除此要求。

所以你需要@onclick="@(() => test(a))

于 2019-06-20T14:34:26.793 回答