在Blazor 项目中,微软对事件的事件参数进行了封装,所有的事件参数类都必须继承 EventArgs 基类。 如我们不清楚当前的方法封装的事件到底是什么类型的?我们可以使用EventArgs来接收参数,之后断点查看下EventArgs的子类类型,这样就可以判断出来事件的类型。
我们这里使用的是@onclick可以看到封装的类型为MouseEventArgs
在 Razor 组件中,事件参数只需要在事件处理程序上定义,在调用时无需要传入任何值
根据上述的测试我们已经知道了事件的具体类型,我们用具体的参数类型来接收,并获取Event中的值
@page "/demoPage"
<h3>DemoPage</h3>
<button @onclick="SetInfo">Update Info</button>
<p>@info</p>
@code {
private string? info;
private void SetInfo(MouseEventArgs eventArgs)
{
info = $"{eventArgs.ScreenX}-{eventArgs.ScreenY}";
}
}
点击前:
点击后:
我们可以通过Event拿到传递的值
如果我们想在传递参数时,不止传递事件参数或者不传递事件参数而传递我们自定义参数时,应该怎么操作?我们可以在 Lambda 表达式中调用任意参数的方法。 @()中显式使用 Lambda 表达式调用 我们用一个示例的场景来看看用法,我们有两个按钮,不同的按钮传递不同内容的多参数
@page "/demoPage"
<h3>DemoPage</h3>
<button @onclick="@((arg)=>SetInfo(arg,"A","AAAAA"))">UpdateA</button>
<button @onclick="@((arg)=>SetInfo(arg,"B","BBBB"))">UpdateB</button>
<p>@info</p>
@code {
private string? info;
private void SetInfo(MouseEventArgs eventArgs, string buttonName, string buttonInfo)
{
info = $"X:{eventArgs.ScreenX}-Y:{eventArgs.ScreenY}-NAME:{buttonName}-Info{buttonInfo}";
}
}
初始化:
点击A:
点击B:
当然我们也可以不传递Event参数,修改如下:
@page "/demoPage"
<h3>DemoPage</h3>
<button @onclick="@(()=>SetInfo(arg,"A","AAAAA"))">UpdateA</button>
<button @onclick="@(()=>SetInfo(arg,"B","BBBB"))">UpdateB</button>
<p>@info</p>
@code {
private string? info;
private void SetInfo(string buttonName, string buttonInfo)
{
info = $"NAME:{buttonName}-Info{buttonInfo}";
}
}