Blazor, нет отслеживаемого объекта с идентификатором 'x'. Возможно, экземпляр DotNetObjectReference уже был удален - PullRequest
1 голос
/ 03 марта 2020

У меня есть редактируемая форма, на первом компоненте рендеринга все в порядке, но когда я покидаю страницу и возвращаюсь назад, возникает сообщение «Нет отслеживаемого объекта с идентификатором« x ». Возможно, экземпляр DotNetObjectReference уже был удален. "

OnAfterRenderAsyn c Метод:

 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:

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

Метод удаления:

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

Javascript Метод : (здесь на второй странице рендера возникает ошибка)

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

  • Обновление Я решаю проблему, изменяя обработчик события из $ (document) .on ('click' to wrapperInstance.on ('click', где wrapperInstance - это обертка для моего текущего компонента:

    var wrapper = $ ("# wrapper"); обертка. removeClass (); wrapper.addClass ("wrapper" + instance ["_ id"]); var wrapperInstance = $ (". wrapper" + instance ["_ id"]);

обратите внимание, что я добавил оболочку к своему компоненту следующим образом:

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