Blazor, There is no tracked object with id 'x'. Perhaps the DotNetObjectReference instance was already disposed

Viewed 2615

I have an editable form, at first component render, everything is OK, but when I leave the page and return back, it raises "There is no tracked object with id 'x'. Perhaps the DotNetObjectReference instance was already disposed."

OnAfterRenderAsync Method :

 private DotNetObjectReference<Groups> _objRef;

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    await base.OnAfterRenderAsync(firstRender);
    if (firstRender)
    {
        _objRef = DotNetObjectReference.Create(this);
        await JSRuntime.InvokeVoidAsync("JSFun", _objRef);
    }
}

JSInvoke Method :

[JSInvokable]
public void UpdateModel(string Id)
{
    Group = GroupService.Get(new Guid(Id));
    StateHasChanged();
}

Dispose Method :

public void Dispose()
{
     _objRef?.Dispose();
}

Javascript Method : (Here in the second page render the error raises)

$(document).on('click', '.btnEdit', function () {       
    instance.invokeMethodAsync('UpdateModel', Id).then(c => {         
        editModal.modal('show');
    });
});

  • Update I solve the problem by changing the event handler from $(document).on('click' to wrapperInstance.on('click' where wrapperInstance is a wrapper to my current component :

    var wrapper = $("#wrapper"); wrapper.removeClass(); wrapper.addClass("wrapper" + instance["_id"]); var wrapperInstance = $(".wrapper" + instance["_id"]);

note that I have added a wrapper to my component like this :

<div id="wrapper">
  component content
</div>
0 Answers
Related