0

当我NavLink在 Blazor 服务器应用程序中使用 a 时,它会呈现为<a>. 我想得到一个包含它的列表项,例如<li><a>.

我还想尽可能地利用NavLink(例如跟踪活动网址)的默认行为。

我尝试了一些简单的东西,比如

public class ListItemNavLink : NavLink
{
    public string? ListItemCssClass { get; set; }

    protected override void BuildRenderTree(RenderTreeBuilder builder)
    {
        builder.OpenElement(0, "li");
        builder.AddAttribute(1, "class", ListItemCssClass);

        builder.OpenElement(2, "a");

        builder.AddMultipleAttributes(3, AdditionalAttributes);
        builder.AddAttribute(4, "class", CssClass);
        builder.AddContent(5, ChildContent);

        builder.CloseElement();
        builder.CloseElement();
    }
}

但是,当我尝试这个

<ListItemNavLink ListItemCssClass="sidebar-item" class="sidebar-link" href="x">

我明白了。

<li><a listitemcssclass="sidebar-item" href="x" class="sidebar-link">

这不正是我想要的。我想得到这样的东西(请注意应用的 ACTIVE 类状态):

<li class="sitebar-item active">
<a class="sidebar-link">Some Text</a>
</li>

有什么提示吗?谢谢

4

1 回答 1

1

如果我理解您的期望,请尝试以下作为您的ListItemNavLink- ListItemNavLink.razor.cs。

<li class="@this.ListItemCssClass">
    <NavLink @attributes="@this.AdditionalAttributes" Match="@this.Match" ActiveClass="@this.ActiveClass" ></NavLink>
</li>

@code {
    [Parameter] public string ListItemCssClass { get; set; }

    [Parameter] public NavLinkMatch Match { get; set; }

    [Parameter] public string ActiveClass { get; set; }

    [Parameter(CaptureUnmatchedValues = true)] public IReadOnlyDictionary<string, object> AdditionalAttributes { get; set; }

}

我已将您使用的普通 [Parameters] 添加NavLink到您的组件中,以便您可以传递它们。

如果你想看看它是如何在obj/debug/net5.0/razorRenderTreeBuilder中找到nnn.g.cs文件的

于 2021-03-18T18:25:57.223 回答