首页 > 解决方案 > Blazor 在 C# 类上使用 RenderTreeBuilder 创建的 html 上的 .razor 传递变量和调用事件

问题描述

我正在使用 Blazor 创建树结构,我需要获取单击的节点的值并将其发送到视图上的函数以将其从树中删除。

这是生成树的 C# 代码:

BinaryTreeService.cs

public void PreOrderTraversal(RenderTreeBuilder builder, BinaryTreeNode node)
    {
        if (node != null)
        {
            //Some Code

            builder.OpenElement(2, "a");
            builder.AddAttribute(2, "href", "javascript: void(0)");
            builder.AddAttribute(2, "value", node.Value);
            builder.AddAttribute(3, "onclick", EventCallback.Factory.Create(this, -->Remove(value)<--));
            builder.AddContent(2, node.Value);
            builder.CloseElement();

            PreOrderTraversal(builder, node.Left);
            PreOrderTraversal(builder, node.Right);

            //Some Code
        }
    }

-->Remove(value)<-- 我想调用一个函数并传递一个值。

二叉树.razor

public void Remove(int value)
{
   //remove
}

我怎样才能实现它?我知道如何在 .cs 中调用一个函数,但我不知道如何在 .razor 中调用一个函数,我也不知道如何使用这种方法从锚标记中获取值。

标签: c#asp.net-coreblazorblazor-server-sideblazor-client-side

解决方案


我使用这个简单的代码,但我使用剃须刀组件而不是使用元素。

我的按钮.razor

@code {
    [Parameter]
    public int Value {get;set;}
    [Parameter]
    public EventCallback<int> AnswerEvent { get; set; }

    public void PressButtonOk()
    {
        AnswerEvent.InvokeAsync(Value);
    }
}

<div @onclick="PressButtonOk">OK</div>

我的代码.cs

public void PreOrderTraversal(RenderTreeBuilder builder, BinaryTreeNode node)
{
    if (node != null)
    {
        builder.OpenControl(0, "mybutton");
        builder.AddAttribute(0, "Value", node.Value);
        builder.AddAttribute(0, "onclick", EventCallback.Factory.Create<int>(this, Remove(value)));
        builder.CloseControl();
    }
}
public void Remove(int value) { }

祝你好运


推荐阅读