【问题标题】:Reflecting over the Page_Load method returns null反射 Page_Load 方法返回 null
【发布时间】: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


【解决方案1】:

经过一番努力,我发现 __EVENTARGUMENT 会为我提供方法名称。


Page_load 是一种受保护的方法,我使用的是 Public BindingFlags。所以在使用了 NonPublic |实例标志我可以通过 relfection 访问 Page_Load 方法

【讨论】:

    【解决方案2】:

    Page.IsPostback 呢?如果 IsPostback 为 false,则页面加载不是由回发触发的,而是新加载。

    【讨论】:

    • IsPostback 将提供信息是否为回发。但它不会提供有关哪个控件和 whioh 事件的信息。我发现就像 __EVENTTARGET 一样,我可以使用 __EVENTARGUMENT 找到事件名称。所以我已经部分找到了答案。
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多