I have the following server-side Blazor application with 2 pages with 2 grids from 2 different tables in a database.
Every row in the table has an edit button which executes a RadzenDialog and in every radzen page I have on method
OnInitialized the delegates for
Close for the dialog like this:
DialogService.OnOpen += MyOpen;
DialogService.OnClose += MyClose;
for every page.
The problem is:
When I go to page 2, do nothing or do an edit, and then go to page 1, insead of the methods from page 1, are executed the methods from page 2 and I've noticed when I go for a third time on the second page the events are fired twice!
How can I fix this problem?
February 26, 2021, 2:30pm
You need to remove the event handlers of the dialog service. This can be done by making your pages implement IDisposable:
public void Dispose
DialogService.OnOpen -= MyOpen;
DialogService.OnClose -= MyClose;
Also you may not need to use OnOpen and OnClose altogether. The OpenAsync method of the dialog service returns the result used when the dialog service is closed.
var result = await DialogService.OpenAsync<MyDialog>();
and then in MyDialog.razor
var dialogResult = true;
It worked like a charm.
(if it's needed it's possible to close the thread)
How to refresh backgound datagrid when i work with DialogService and Dialog still show not close yet?
Declare a parameter of type EventCallback in the component that is opened as a dialog. Upon opening the dialog with DialogService.Open... pass aprropriate callback as an argument for this parameter.