如何停止blazor @onclick重新渲染页面

时间:2020-08-07 03:54:01

标签: .net-core onclick blazor

我正在使用blazor服务器应用程序

我有一个控件,当使用@onclick事件处理程序单击时,我想使用click event方法中的NavigationManager导航到新页面。 控件是什么(按钮,a,tr等)是否具有相同的行为并不重要

如果我在HTML中添加了一个断点,则可以看到当前页面在进入新页面之前正在重新呈现。

重现此行为的简单方法是创建一个新的blazor项目,并在counter.razor页面中 将代码更改为此

@page "/counter"

<h1>Counter</h1>

@if (1 == 1)
{
<p>Current count: @currentCount</p>
}

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

@code {
private void IncrementCount()
    {
        //currentCount++;
    }
}

在HTML行“ @if(1 == 1)”上输入一个断点 当单击按钮时,它将调用不执行任何操作的click事件(代码已注释掉),然后重新呈现页面并命中断点。 如果我在单击事件中添加代码以调用NavigationManager离开页面,则发生同样的事情,当页面上没有任何更改时,它将在离开页面之前重新渲染。

添加onclick:preventDefault和/或@onclick:stopPropagation不会对此进行更改

我发现唯一可行的方法就是添加

    private bool c_blnStopRendering = false;

    protected override bool ShouldRender()
    {
        if (c_blnStopRendering == true) { return false; }
        return base.ShouldRender();
    }

并设置c_blnStopRendering = true;在点击事件中 但这似乎是致命的,并且非常手动将其添加到需要的地方

1 个答案:

答案 0 :(得分:0)

这是目前唯一的方法。积压的https://github.com/dotnet/aspnetcore/issues/18919

中有一个请求