如何防止 Blazor NavLink 组件的默认导航

tom*_*dox 4 c# blazor

由于 Blazor 3.1 Preview 2 应该可以防止Blazor 中链接的默认导航行为,如本答案中所述

但是,这段代码:

<NavLink href="" Match="Match" @onclick:preventDefault @onclick="()=>LinkAction()" >
Do something
</NavLink>
Run Code Online (Sandbox Code Playgroud)

给出这个错误:

组件参数 'onclick' 用于该组件两次或多次。参数必须唯一(不区分大小写)

这是为什么?

tom*_*dox 5

尽管 HTML<A>标记和 BlazorNavLink组件的最终结果大致相同,但@onclick:preventDefault语法仅适用于 HTML 版本,不适用于 Blazor 组件。

史蒂夫桑德森在这里解释了这一点

恐怕没有一种机制可以将诸如 @*:preventDefault 之类的任意指令属性作为组件参数传递,因此预计这不适用于 NavLink。

Steve 还给出了一个可能的解决方案:

但是,您可以从添加“阻止默认”行为的 NavLink 继承您自己的子类。例如,创建 NavLinkPreventDefault.razor,包含以下内容:

@inherits NavLink 
<a @attributes="@AdditionalAttributes" class="@CssClass" @onclick:preventDefault>
    @ChildContent 
</a> 
Run Code Online (Sandbox Code Playgroud)

现在您可以使用代替来获得您想要的行为。