C# 单击生成的html组件调用方法

C# 单击生成的html组件调用方法,c#,razor,blazor,C#,Razor,Blazor,我是Blazor的新手,我正在尝试使用RenderTreeBuilder创建一个HTML片段。 这个块基本上是一个div,单击时应该调用一个方法,并将其值存储在变量中 AutocompleteListRender = builder => { builder.OpenElement(0, "div"); builder.AddAttribute(0, "id", "input-autocomplete-list"); builder.AddAttribute(0,

我是Blazor的新手,我正在尝试使用RenderTreeBuilder创建一个HTML片段。 这个块基本上是一个div,单击时应该调用一个方法,并将其值存储在变量中

AutocompleteListRender = builder =>
{
    builder.OpenElement(0, "div");
    builder.AddAttribute(0, "id", "input-autocomplete-list");
    builder.AddAttribute(0, "class", "autocomplete-items");

        foreach (string entry in Entries)
        {
            if (entry.ToLower().Contains(Value))
            {
                builder.OpenElement(1, "div");
                builder.AddAttribute(1, "id", entry + "-autocomplete-list");
                builder.AddAttribute(1, "onclick", /* Method to call */);
                builder.AddAttribute(1, "value", @entry);

                builder.AddContent(1, entry);

                builder.CloseElement();
            }
        }

        builder.CloseElement();
    };
这里的问题是如何附加事件,因为我不能在这里使用@onclick。 我想知道我在这里有哪些选项,因为我已经看到可以调用事件,但无法使其工作。

您需要使用调用方法。像这样:

builder.AddAttribute(1, "onclick", Microsoft.AspNetCore.Components.EventCallback.Factory.Create<Microsoft.AspNetCore.Components.UIMouseEventArgs>(this, YourMethod));
您需要使用调用方法。像这样:

builder.AddAttribute(1, "onclick", Microsoft.AspNetCore.Components.EventCallback.Factory.Create<Microsoft.AspNetCore.Components.UIMouseEventArgs>(this, YourMethod));

@RamondeLlano很高兴听到这个消息。@TimoSalomäki我怎样才能将一个参数传递给你的方法?@Guillhermeflores有Create方法的重载,只需一个参数操作,如。如果您不熟悉动作委托,您可以看看如何在您的Create方法中传递带有一个参数的动作。@RamondeLlano很高兴听到。@TimoSalomäki如何将参数传递给您的方法?@Guillermeflores Create方法中有带有单参数动作的重载,如。如果您不熟悉动作委托,可以查看一下,了解如何在创建方法中传递带有一个参数的动作。除非您有很好的理由,否则建议不要以这种方式构建组件,而是坚持使用razor文件。特别是如果你要给每一帧你在这里展示的相同序列。请参阅@SteveSandersonMS中的这一要点,他们在那里解释了为什么这是不好的。除非您有很好的理由,否则建议不要以这种方式构建组件,而是坚持使用razor文件。特别是如果你要给每一帧你在这里展示的相同序列。请参阅@SteveSandersonMS中的这一要点,他们在那里解释了为什么这是不好的。