Blazor,没有id为'的跟踪对象;x';。可能DotNetObjectReference实例已被释放

Blazor,没有id为'的跟踪对象;x';。可能DotNetObjectReference实例已被释放,blazor,blazor-server-side,Blazor,Blazor Server Side,我有一个可编辑的表单,在第一次组件渲染时,一切正常,但当我离开页面并返回时,它会引发“没有id为“x”的跟踪对象。可能DotNetObjectReference实例已被释放。” OnAfterRenderAsync方法: private DotNetObjectReference<Groups> _objRef; protected override async Task OnAfterRenderAsync(bool firstRender) { await base.

我有一个可编辑的表单,在第一次组件渲染时,一切正常,但当我离开页面并返回时,它会引发“没有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);
    }
}
处置方法:

[JSInvokable]
public void UpdateModel(string Id)
{
    Group = GroupService.Get(new Guid(Id));
    StateHasChanged();
}
public void Dispose()
{
     _objRef?.Dispose();
}
Javascript方法:(在第二页中呈现错误引发)


  • 更新 我通过将事件处理程序从$(document)更改为wrapperInstance来解决此问题。on('click')将wrapperInstance更改为wrapperInstance。on('click'),其中wrapperInstance是我当前组件的包装:

    var wrapper=$(“#wrapper”); wrapper.removeClass(); addClass(“wrapper”+实例[“_id”]); var wrapperInstance=$(“.wrapper”+实例[“\u id]”)

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

<div id="wrapper">
  component content
</div>

成分含量

将JS dom操作与Blazor混合在一起不是一个好主意,但让我们假设您知道自己在做什么,然后问问——JSFun中发生了什么?您怎么说这不是一个好主意?Blazor应用程序可以从.NET方法调用JavaScript函数,从JavaScript函数调用.NET方法。
<div id="wrapper">
  component content
</div>