Blazor,没有 ID 为“x”的跟踪对象。也许 DotNetObjectReference 实例已经被释放

Ali*_*ian 5 blazor blazor-server-side

我有一个可编辑的表单,首先组件渲染,一切正常,但是当我离开页面并返回时,它会引发“没有 id 'x' 的跟踪对象。也许 DotNetObjectReference 实例已经被释放。”

OnAfterRenderAsync 方法:

 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

JSInvoke 方法:

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

处置方法:

public void Dispose()
{
     _objRef?.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

Javascript方法:(在第二页渲染中出现错误)

$(document).on('click', '.btnEdit', function () {       
    instance.invokeMethodAsync('UpdateModel', Id).then(c => {         
        editModal.modal('show');
    });
});
Run Code Online (Sandbox Code Playgroud)
  • 更新 我通过将事件处理程序从 $(document).on('click' 更改为wrapperInstance.on('click' 来解决问题,其中wrapperInstance 是我当前组件的包装器:

    var 包装器 = $("#wrapper"); 包装器.removeClass(); wrapper.addClass(“包装器”+实例[“_id”]); varwrapperInstance = $(".wrapper" + instance["_id"]);

请注意,我已经向我的组件添加了一个包装器,如下所示:

<div id="wrapper">
  component content
</div>
Run Code Online (Sandbox Code Playgroud)