在代码中模拟页面生命周期

时间:2013-02-11 09:28:44

标签: .net webforms page-lifecycle

我有一个自定义Control,我在其上覆盖了OnInit方法。

更新

我似乎需要通过Init获取userControl.GetType().GetEvent("Init")事件。但是,该事件的RaiseMethod属性为null,因此我无法通过反射引发事件。 任何线索?

我使用以下代码加载控件(ReflectionUtil使用反射调用方法):

        Page p = new Page();
        UserControl userControl = (UserControl)p.LoadControl(path);
        p.Controls.Add((Control)userControl);

        //EventArgs eventArgs = new EventArgs();

        //ReflectionUtil.CallMethod((object)p, "OnInit", (object[])new EventArgs[1] { eventArgs });
        //ReflectionUtil.CallMethod((object)userControl, "OnInit", (object[])new EventArgs[1] { eventArgs });

        //Plain Reflection doesn't work either...
        EventArgs eventArgs = new EventArgs();

        MethodInfo initMethod = userControl.GetType().GetMethod("OnInit");
        initMethod.Invoke(userControl, (object[])new EventArgs[1]
          {
            eventArgs
          });

但是,当我在自定义控件的OnInit方法中设置断点时,它不会被调用。 我在这里遗漏了什么吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

OnInit受到保护,GetMethod超载仅使用公共方法。

您可以使用the overload with the bindingflag NonPublic获取受保护的方法。