asp.net页面编译后,构造函数里不会去实例化包含的控件,所以你只是创建页面的实例是不够的,页面必须要经过asp.net的解析器解析。
如果你只是要玩反射,建议你用winform,因为感觉你这段代码也就是试验性质,没有实际作用。创建的了页面后也不干别的就会被垃圾垃圾回收器回收了。

解决方案 »

  1.   

    你要在其他类里面控制页面上的控件值,应该这样:
    ((test2)HttpContext.Current.Handler).testMethod();       
    建议这样使用:
    HttpContext context = HttpContext.Current;
    if(context != null)
    {
        test2 page = context.Handler as test2;
        if(page != null)
        {
            page.testMethod();       
        }
    }
      

  2.   

    常规的做法下是没有办法的。你可以动态构造一个类,从test2继承,并创建一个TextBox实例设置给TextBox1。在写了这个代码之后,动态编译和输出为dll,然后测试程序动态调入这个dll,把这个新的类的名称作为你的“利用完全限定名,,,,,,”。如果要测试界面组件,最好只测试ascx。可以用一个Page作为测试驱动程序,动态装入各种ascx到测试页的PlaceHolder中,设置输入参数值,然后把页面输出到客户端。然后再使用一个客户端定时器(例如持续100毫秒)回发到服务器端,进行下一个测试。
      

  3.   

    当你可以“动态构造类并编译输出为dll”时,其实你的.net能力几乎是“无所不能”了!程序也许不算复杂,借助一些比较好用的程序集(例如Mono.Cecil.dll),十几行代码也可以完成,不过我们不讨论这么深了。
      

  4.   

    当你“假造”一个实例的时候,并不能像asp.net做的那样为test2设置好了千百个环境变量,所以这并不是一个用在面向最终用户的界面的应用。如果是用在实际的应用中(而不是测试中),那么应该正规地去创建aspx页面实例。
      

  5.   

    楼上的也听懂了我的意思,AjaxPro是通过客户端将当前页面的"完全限定名"传到指定页面,并通过反射调用"完全限定名"的方法。当被调方法中有页面上的实例,如TextBox1的时候会找不到这个TextBox1,所以才有此需求.