c# - 传递空回调 Blazor

标签 c# asp.net-core blazor

我有一个将回调作为参数的组件。如果某个条件为真,我只想将回调传递给它。我可以传递给它什么会使 Callback.HasDelegate 失败查看

就像是

<EntityActionMenu  DeleteCallback="@(Item.Id == 0 ? null : EventCallback.Factory.Create(this, Delete))"></EntityActionMenu>

或者
<EntityActionMenu SaveCallback="@Save" DeleteCallback="@(Item.Id == 0 ? EventCallback.Factory.Create(this, Task<null>) : EventCallback.Factory.Create(this, Delete))" ></EntityActionMenu>

编辑

这是接收组件
@if (DeleteCallback.HasDelegate)
        {
            <MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
        }

@code {

    [Parameter] public EventCallback DeleteCallback { get; set; }

    protected override void OnInitialized()
    {
        System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
    }

    protected override void OnParametersSet()
    {
        System.Diagnostics.Debug.WriteLine(DeleteCallback.HasDelegate);
    }

}

最佳答案

如果你想使用 HasDelegate要确定是否显示按钮,则必须创建 EventCallbacknull代表。如果您使用 EventCallback.Empty HasDelegate将返回真。

我认为这样的事情会奏效。

<EntityActionMenu SaveCallback="Save"
              DeleteCallback="@(item.ID == 0 ? new EventCallback(null, null) : 
              EventCallback.Factory.Create(this, Delete))" />

作为替代方案,您可以更改组件以检查 DeleteCallback为 null 而不是使用 HasDelegate .例如
@if (DeleteCallback is null)
{
    <MatButton Raised="true" OnClick="@(() => DeleteCallback.InvokeAsync(""))" Class="warn">Delete</MatButton>
}

这可能会让你更容易。

关于c# - 传递空回调 Blazor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59941288/

相关文章:

c# - 创建和打印一个简单的表格

authentication - ASP.NET Core RC2 Jwt token KID 错误

c# - 使用 IConfigureOptions 配置注入(inject)的依赖项

c# - 如何从我的 ASP.NET Core 应用程序中永久注销用户?

c# - Blazor 中的 Google Chrome 扩展程序

c# - 模拟不工作 - Asp.Net 核心 3.1 应用程序在 IIS 中托管 Windows 身份验证

c# - 在服务器端 Blazor 中使用 SignInManager

c# - 如果这个类没有 Dispose 方法,它如何实现 IDisposable?

c# - 为什么人们使用 ProjectData

c# - 如何通过 C# WebClient 发送 HTTP DELETE 请求?