EventCallback <dynamic>引发RuntimeBinderException

时间:2019-10-25 21:38:11

标签: c# blazor blazor-server-side blazor-client-side

使用默认模板,我修改了Counter:

@code {
    private int currentCount = 0;

    private async void IncrementCount()
    {
        currentCount++;

        await UpdateCallback.InvokeAsync(new { Counter = currentCount });
    }

    [Parameter] public EventCallback<dynamic> UpdateCallback { get; set; }
}

我正在这样使用它:

<Counter UpdateCallback="(d)=>MyCallback(d,42)"></Counter>

@code {

    public void MyCallback(dynamic val, int number)
    {

    }
}

这导致

  

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'无法将类型'void'隐式转换为'object'

如果我绕过Tuple<dynamic>,就可以了。

那是为什么?

1 个答案:

答案 0 :(得分:0)

您使用InvokeAsync进行了调用,因此期望使用的方法将返回任务不为空。在您使用Counter组件的地方使用它,我认为这可以解决您的问题。

<Counter UpdateCallback="async (d)=> await MyCallback(d,42)"></Counter>

@code {

    public async Task MyCallback(dynamic val, int number)
    {

    }
}