Blazor RenderTreeBuilder中的事件

Blazor RenderTreeBuilder中的事件,blazor,Blazor,我在使用RenderTreeBuilder对Blazor组件使用事件绑定时遇到问题。我了解如何使用编写HTML并将事件附加到组件的直接方法触发事件。但是,我现在需要使用RenderTreeBuilder 直接法 <input type="text" @bind-value="InputValue" @bind-value:event="oninput" @onkeyup="ChangeCounter" /> 我对html元素和rest做了一些改进,如下所示: @输入值 @柜台 @

我在使用RenderTreeBuilder对Blazor组件使用事件绑定时遇到问题。我了解如何使用编写HTML并将事件附加到组件的直接方法触发事件。但是,我现在需要使用RenderTreeBuilder

直接法

<input type="text" @bind-value="InputValue" @bind-value:event="oninput" @onkeyup="ChangeCounter" />

我对html元素和rest做了一些改进,如下所示:


@输入值

@柜台

@代码{ 公共字符串InputValue{get;set;}=“你好,Blazor”; 专用字符串计数器; 专用任务更改计数器(KeyboardEventArgs args) { 计数器=args.Key.ToString(); 返回Task.CompletedTask; }
运行上面的代码,让编译器生成下面的代码。查看编译器正在执行的操作并模拟。注意:如果将Blazor代码放入索引组件中,则代码应位于
\obj\Debug\netcoreapp3.1\Razor\Pages\Index.Razor.g.cs

[Microsoft.AspNetCore.Components.RouteAttribute(“/”)]
公共部分类索引:Microsoft.AspNetCore.Components.ComponentBase
{
受保护的覆盖无效
BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder
__建筑商)
{
__builder.OpenElement(0,“输入”);
__builder.AddAttribute(1,“类型”、“文本”);
__builder.AddAttribute(2,onkeyup),Microsoft.AspNetCore.Components.EventCallback.Factory.Create(这是ChangeCounter);
__builder.AddAttribute(3,“值”,Microsoft.AspNetCore.Components.BindConverter.FormatValue(InputValue));
__builder.AddAttribute(4,“oninput”,Microsoft.AspNetCore.Components.EventCallback.Factory.CreateBinder(this,_值=>InputValue=_值,InputValue));
__builder.SetUpdatesAttributeName(“值”);
__builder.CloseElement();
__builder.AddMarkupContent(5,“\r\n\r\n”);
__建造商开环要素(6,“p”);
__builder.AddContent(7,输入值);
__builder.CloseElement();
__builder.AddMarkupContent(8,“\r\n”);
__建造商开环要素(9,“p”);
__生成器。添加内容(10,计数器);
__builder.CloseElement();
}
还要注意编译器如何生成序列号。这是正确的方法


希望这有助于…

关于序列编号的快速注释——如果序列是确定性的,它将起作用。请参阅@ Quango,你有一个很好的论点是确定性的。我不认为UI是基于输入而改变的,但是如果我需要一个不确定的解决方案,那是一件很值得考虑的事情。告诉我(我有一个电话会议!)。我总是看编译器从
.razor
语法中创建什么,看看它是如何实现的。you best me to it=>这个习语的意思是,我要说/做同样的事情,你在我之前就做了。非常感谢你让我学习一个新的习语。英语不是我的母语。它是我的第三语言……没问题!你的答案非常好d、 我对它进行了轻微的编辑,只是为了布局/打字。在英语中,我们很少用性别来表示“事物”,例如,编译器是“it”而不是“she”“-但我可能错了:)但你可能会问史蒂夫·桑德森或瑞安·诺瓦克…@enet谢谢你的解决方案。我对blazor的RenderTreeBuilder还比较陌生。@Quango,谢谢你编辑我的答案。编辑经常让我发疯,所以我保持原样。使用“她”而不是“它”,这是用来形容物体和动物的正确词语,是故意的……谢谢。
public RenderFragment RenderContent => (builder => 
{
    int i = 0;
    builder.OpenElement(i++, "input");
    // Not an official property
    builder.AddEventCapture(i++, @bind-value, "InputValue");
    // Not an official property
    builder.AddEventCapture(i++, @bind-value:event, "oninput");
    // Not an official property
    builder.AddEventCapture(i++, @onkeyup, "ChangeCounter");
    builder.CloseElement();
});

Thanks in advance