Blazor:{EVENT}上的内置@on与自定义EventCallback之间的区别

Blazor:{EVENT}上的内置@on与自定义EventCallback之间的区别,blazor,Blazor,如果这个问题看起来很傻,请原谅;但是我对@前缀的用法感到困惑 将鼠标悬停在内置事件(如onclick)上时,Visual Studio中的IntelliSense显示事件类型(onclick,在本例中)为Microsoft.AspNetCore.Components.EventCallback,在组件中实现EventCallback时,显然,类型也是Microsoft.AspNetCore.Components.EventCallback 但是为什么像onclick这样的内置事件应该以@作为前缀

如果这个问题看起来很傻,请原谅;但是我对
@
前缀的用法感到困惑

将鼠标悬停在内置事件(如
onclick
)上时,Visual Studio中的IntelliSense显示事件类型(
onclick
,在本例中)为
Microsoft.AspNetCore.Components.EventCallback
,在组件中实现
EventCallback
时,显然,类型也是Microsoft.AspNetCore.Components.EventCallback

但是为什么像
onclick
这样的内置事件应该以
@
作为前缀,而
EventCallback
(s)应该像属性一样声明(没有
@
作为前缀)

如果这个问题看起来很傻,请原谅;但是我对@prefix的用法感到困惑

一点也不。。。这是一个非常重要的问题,Blazor中的所有开发人员不仅应该能够回答这个问题,而且应该能够采取行动

属性“@onclick”是一个编译器指令,指示编译器创建EventCallback“委托”。EventCallback是存储对委托的引用的结构;这是一个方法,实际上是您分配给属性“@onclick”的值,例如:

<button type="button" @onclick="ClickMe">Click me</button>

@code
{
     private void ClickMe()
    {
       Console.WriteLine("You clicked me...");
    }
}
现在,当您单击按钮时,在窗口对象上定义的名为
ClickMe
的JavaScript函数被称为。。。注意圆括号

当然,有各种各样的方法来做上面的事情

在您发布的照片中,模态组件有一个名为
onOK
的属性,其类型为
EventCallback
,因此它的值应该是一个合适的方法,
ModalOnOK
。以下代码片段说明了这一点:

Modal.razor(模态的定义)

如您所见,
onOK
是一个类型为
EventCallBack
的参数属性。因此,在使用模态组件的父组件中,应该使用
EventCallBack
可以封装的方法的值来分配property属性

对不起,有很多很多话要说,这只是材料的一小部分。但该分手了


希望这有助于

正是@enet很好地解释了这一点:)
<button type="button" onclick="window.ClickMe()">Click me</button>
@code{
    [Parameter]
    public EventCallBack onOK {get; set;}
}