private List<KeyValuePair<String, object>> ParseEvents()
{
var result = new List<KeyValuePair<String, object>>();
var type = this.GetType();
var auto = typeof(IAutoPostBack).IsAssignableFrom(type);
var events = GetEvents();
var postbacks = new Dictionary<String, String>();
foreach (var e in events) {
var @event = type.GetEvents().Where(ev => ev.Name.ToLower() == e.Name || ev.Name == e.EventName).FirstOrDefault();
if (@event == null || !auto) {
continue;
//throw new ArgumentException("Brew Error: Widget has event defined with no matching EventHandler.");
}
if (auto) {
var iauto = this as IAutoPostBack;
if (!iauto.AutoPostBack) {
continue;
}
}
var field = type.GetField(@event.Name, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy);
var del = (Delegate)field.GetValue(this);
if (del != null) {
var list = del.GetInvocationList();
// add only those for which event handlers are assigned
if (list != null && list.Length > 0 && e.CausesPostBack) {
postbacks.Add(e.Name, e.DataChangedEvent ? @event.Name : null);
}
}
}
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
var json = js.Serialize(postbacks);
var pair = new KeyValuePair<string, object>("postbacks", json);
result.Add(pair);
return result;
}