@inject IModalService ModalService @inject IJsInterop JsInterop @code { private string _showClass; private string _displayStyle; protected override Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { ModalService.ModalShown += async (sender, args) => { _displayStyle = "block"; await InvokeAsync(StateHasChanged); // The fade animation won't work without a delay here. await Task.Delay(100); _showClass = "show"; await InvokeAsync(StateHasChanged); }; } return base.OnAfterRenderAsync(firstRender); } private async Task CloseModal() { _showClass = null; await InvokeAsync(StateHasChanged); await Task.Delay(100); _displayStyle = null; await InvokeAsync(StateHasChanged); } private async Task ExecuteButtonAction(Action onclick) { onclick.Invoke(); await CloseModal(); } }