【发布时间】:2010-12-02 23:55:00
【问题描述】:
我的问题与通过作为委托的一部分调用的方法检索属性有关_[例如。 Page.OnLoad 或 Button_Click]_
我在 _[Page_Load]_ 或 _[AnyWebControl_Event]_ 上有一个方法属性 [MyMethodAttribute(PropertyOne, PropertyTwo)]。此方法属性需要在运行时通过放置它的方法进行查询。该方法驻留在任何网页的代码隐藏中。所有网页都派生自 BaseWebPage。该事件可以是页面加载或回发事件。 根据事件是由页面加载还是回发触发,我获得了控件 [页面或回发] 的句柄,并添加了要执行的方法 [MyMethod]。
_eventControl = GetPostBackControl(page); //__EVENTTARGET or any control
if (_eventControl != null) // this is a postback control for any page
{
_eventControl.Load += new EventHandler(MyMethod);
}
else // this is PageLoad method for any page
{
_eventControl = page;
page.Load += new EventHandler(MyMethod);
}
之后,我试图找到事件 [例如Page_Load] 触发了页面加载。这是我无法掌握该方法的地方,并尝试了所有不同的方法。
其中一种方法是查询哪个事件委托触发了加载或回发。但是无法从类外部访问该事件,因此我无法使用 MyDelegate.GetInvocationList(),因为它返回 null。
感谢任何帮助。
经过一番努力,我发现 __EVENTARGUMENT 会为我提供方法名称。 我现在有一个不同的问题。当我为 Page_Load 方法反映 ASPX 页面时,它返回 null。 有什么想法吗?
Page_load 是一种受保护的方法,我使用的是 Public BindingFlags。所以在使用了 NonPublic |实例标志我可以通过 relfection 访问 Page_Load 方法
【问题讨论】:
-
我找到了我的问题的答案。 Page_Load 方法受到保护,我使用的是 Public 绑定标志。我的问题已解决。
标签: c# events event-handling postback