我正在使用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;在点击事件中 但这似乎是致命的,并且非常手动将其添加到需要的地方