我正在使用blazor服务器应用程序
我有一个控件,当使用@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行上放置一个断点"@如果(1==1(";当按钮被点击时,它会调用click事件,但它什么都不做(代码注释掉了(,然后它会重新呈现页面,并达到断点。如果我在点击事件中添加代码,调用navigationManager导航离开页面,也会发生同样的情况,当页面上没有任何更改时,它会在离开页面之前重新呈现。
添加onclick:prepventDefault和/或@onclick:stopPropagation不会更改此
我发现唯一有效的是添加
private bool c_blnStopRendering = false;
protected override bool ShouldRender()
{
if (c_blnStopRendering == true) { return false; }
return base.ShouldRender();
}
并将c_blnStopRendering设置为true;在单击事件中但这似乎是过度杀伤,并且非常手动地将其添加到需要的任何地方
这是目前唯一的方法。积压工作中有一个请求https://github.com/dotnet/aspnetcore/issues/18919
我想知道你是怎么做到的。我也遇到了同样的问题(我只是想在没有任何重新渲染的情况下导航到(。重写ShouldRender以返回false,停止了所有操作,即它没有导航到URL。然而,我导航到了同一个页面,但在QS中使用了不同的参数。当我在NavigateTo方法(public void NavigateTo(string uri, bool forceLoad = false);
(中发现一个可选参数时,我似乎已经解决了这个问题。我把它设置为真的,现在似乎一切都好了。只是对你的经历感兴趣