chanan / BlazorStrap

Bootstrap 4 Components for Blazor Framework
https://blazorstrap.io
The Unlicense
916 stars 157 forks source link

InvalidOperationException: The render handle is not yet assigned in BlazorStrap's BSModalBase on Modal.ShowAsync() #607

Closed AntonioFalcaoJr closed 9 months ago

AntonioFalcaoJr commented 9 months ago

OnInitialized does not represent the actually initialized Modal.

CODE:

@inherits Fluxor.Blazor.Web.Components.FluxorComponent

@using BlazorStrap
@using Fluxor
@using WebAPP.Store.Cataloging.Commands
@using WebAPP.Store.Cataloging.Events
@using WebAPP.Store.Catalogs

@inject IState<CatalogState> State
@inject IDispatcher Dispatcher

<BSModal href="@Modal" DataId="modal" IsStaticBackdrop="true">
    <BSForm Model="State.Value.NewItem" OnValidSubmit="@AddCatalogItem">
        <DataAnnotationsValidator/>
        <BSModalHeader>New catalog item</BSModalHeader>
        <BSModalContent>
            <BSValidationSummary/>
            <div class="mb-3">
                <BSLabel>Name</BSLabel>
                <BSInput InputType="InputType.Text" placeholder="Name" @bind-Value="State.Value.NewItem.Name"/>
                <BSFeedback For="@(() => State.Value.NewItem.Name)"/>
            </div>
            <div class="mb-3">
                <BSLabel>Description</BSLabel>
                <BSInput InputType="InputType.TextArea" placeholder="Description" @bind-Value="State.Value.NewItem.Description"/>
                <BSFeedback For="@(() => State.Value.NewItem.Description)"/>
            </div>
        </BSModalContent>
        <BSModalFooter>
            <BSButton Target="modal">Cancel</BSButton>
            <BSButton IsSubmit="true" Color="BSColor.Primary">Add item</BSButton>
        </BSModalFooter>
    </BSForm>
</BSModal>

@code {

    private BSModal Modal { get; set; } = new();

    protected override void OnInitialized()
    {
        base.OnInitializedAsync();
        SubscribeToAction<CatalogItemCreationStarted>(_ => Modal.ShowAsync());
    }

    private void AddCatalogItem() { }

}

LOG

Unhandled Exception: 
System.InvalidOperationException: The render handle is not yet assigned. 
   at Microsoft.AspNetCore.Components.RenderHandle.ThrowNotInitialized() 
   at Microsoft.AspNetCore.Components.RenderHandle.get_Dispatcher() 
   at Microsoft.AspNetCore.Components.ComponentBase.InvokeAsync(Action workItem) 
   at BlazorStrap.Shared.Components.Modal.BSModalBase.ShowAsync() 
   at WebAPP.Pages.AddCatalogItemModal.Show() in C:\Projects\EventualShop\src\Web\WebAPP\Pages\AddCatalogItemModal.razor:line 63 
   at WebAPP.Pages.AddCatalogItemModal.<OnInitializedAsync>b__6_0(CatalogItemCreationStarted _) in C:\Projects\EventualShop\src\Web\WebAPP\Pages\AddCatalogItemModal.razor:line 45 
   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state) 
   at System.Threading.QueueUserWorkItemCallbackDefaultContext.Execute() 
   at System.Threading.ThreadPoolWorkQueue.Dispatch() 
   at System.Threading.ThreadPool.BackgroundJobHandler()