简体   繁体   中英

Blazor EventCallback parameter not firing

I am trying to get a child component to update a list on the parent. To do this I setup an EventCallback that takes a list and sends it to the parent. The issue is the event never fires and the HasDelegate variable on the callback is false.

Parent .razor.cs:
        public async Task UpdateSelectedCompanies(List<CompanyStub> companies)
        {
            _selectedCompanies = companies;

            await InvokeAsync(StateHasChanged);
        }

Parent .razor:
        <CompanyTable IncludeCheckbox="true" UpdateCompanies="@UpdateSelectedCompanies"></CompanyTable>

Child .razor.cs:
        [Parameter] public EventCallback<List<CompanyStub>> UpdateCompanies { get; set; }

        private async Task CheckboxRowSelectHandler(RowSelectEventArgs<CompanyStub> args)
        {
            SelectedCompanies.Add(args.Data);

            await UpdateCompanies.InvokeAsync(SelectedCompanies);

        }

CheckboxRowSelectHandler does get called, but the UpdateCompanies event never fires.

I am expecting for the event to be fired, but the event never gets fired.

Here's a simplified version of your code that works. Use it to test your child/parent.

One thing to check: Is your razor.cs file correctly linked to the razor component file?

ChildComponent.razor

<div class="m-2 p-2 bg-light">
    <h3>ChildComponent</h3>

    <button class="btn btn-primary" @onclick=this.OnClick>Click me</button>

</div>

@code {
    [Parameter] public EventCallback<string> ValueChanged { get; set; }

    private async Task OnClick()
        => await this.ValueChanged.InvokeAsync($"Set at {DateTime.Now.ToLongTimeString()}");
}
@page "/"

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<ChildComponent ValueChanged="@this.OnClicked" />

@if (!string.IsNullOrWhiteSpace(this.message))
{
    <div class="alert alert-info">
        @message
    </div>
}

@code {
    private string message = string.Empty;

    // No call to StateHasChanged required
    // The ComponentBase UI handler does it
    private void OnClicked(string value)
        => message = value;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM