Fix #5774: remove duplicated radzen dialog delegate handlers.
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
@using System.Text.RegularExpressions
|
@using System.Text.RegularExpressions
|
||||||
@using Radzen
|
@using Radzen
|
||||||
@using Radzen.Blazor
|
@using Radzen.Blazor
|
||||||
|
@using System.Reflection
|
||||||
|
|
||||||
@namespace Oqtane.Modules.Controls
|
@namespace Oqtane.Modules.Controls
|
||||||
@inherits ModuleControlBase
|
@inherits ModuleControlBase
|
||||||
@@ -93,6 +94,17 @@
|
|||||||
}
|
}
|
||||||
await _interop.SetBackgroundColor(_editor.Element, backgroundColor);
|
await _interop.SetBackgroundColor(_editor.Element, backgroundColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var subscribers = GetEventSubscribers(DialogService, "OnOpen");
|
||||||
|
var dialogSubscibers = subscribers?.Where(s => s.Method.DeclaringType == typeof(RadzenDialog)) ?? Enumerable.Empty<Delegate>();
|
||||||
|
if (dialogSubscibers.Count() > 1)
|
||||||
|
{
|
||||||
|
//clean the event to avoid multiple RadzenDialog instances subscribing to the event
|
||||||
|
dialogSubscibers.Skip(1).ToList().ForEach(s =>
|
||||||
|
{
|
||||||
|
DialogService.OnOpen -= s as Action<string, Type, Dictionary<string, object>, DialogOptions>;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,4 +224,23 @@
|
|||||||
{
|
{
|
||||||
await _interop.UpdateDialogLayout(_editor.Element);
|
await _interop.UpdateDialogLayout(_editor.Element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Delegate[] GetEventSubscribers(object target, string eventName)
|
||||||
|
{
|
||||||
|
var type = target.GetType();
|
||||||
|
var eventField = type.GetField(eventName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
|
||||||
|
|
||||||
|
if (eventField == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var eventDelegate = eventField.GetValue(target) as Delegate;
|
||||||
|
if (eventDelegate == null)
|
||||||
|
{
|
||||||
|
return new Delegate[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return eventDelegate.GetInvocationList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user