public static void FireEvent(this Page myPage, WebFormEvent e, EventArgs args) { Dictionary <WebFormEvent, bool> _EventsTriggered = new Dictionary <WebFormEvent, bool>(); if (myPage.Items.Contains("eventsTriggered")) { _EventsTriggered = myPage.Items["eventsTriggered"] as Dictionary <WebFormEvent, bool>; } if (_EventsTriggered.ContainsKey(e)) { throw new InvalidOperationException($"Previously triggered the {e.ToString()} event"); } _EventsTriggered.Add(e, true); myPage.Items["eventsTriggered"] = _EventsTriggered; string methodName = ""; switch (e) { case WebFormEvent.Init: //methodName = "OnInit"; break; case WebFormEvent.Load: myPage.LoadRecursiveInternal(); break; case WebFormEvent.PreRender: //methodName = "OnPreRender"; myPage.PreRenderRecursiveInternal(); break; case WebFormEvent.Unload: methodName = "OnUnload"; break; default: break; } if (methodName == string.Empty) { return; } var thisMethod = _Type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic); thisMethod.Invoke(myPage, new object[] { args }); }