我正在使用 Blazor Server 应用程序。
我有一个控件,当使用 @onclick 事件处理程序点击它时,我想在单击事件方法中使用 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)"上设置断点。
当按钮被点击时,它会调用点击事件并且什么都不做(代码被注释了),然后重新渲染页面,断点就会被触发。
如果我在点击事件中添加调用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;,但这似乎过度并且需要在每个需要添加的地方手动添加。