public partial class Template2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Page page = new Page();//这里新建了一个page对像,不是当前的page对像
            System.Web.UI.UserControl control = (System.Web.UI.UserControl)page.LoadControl("/Pay/Nav.ascx");
            page.Controls.Add(control);//在新建的page对像中加载进去
            System.IO.StringWriter tw = new System.IO.StringWriter();
            HtmlTextWriter wt = new HtmlTextWriter(tw);
            page.RenderControl(wt);//在新建的page对像 输出html
            //control.RenderControl(wt);
            Response.Write(tw.ToString());
        }
    }    public partial class Nav : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e) //在新建的page不执行load事件
        {
            Response.Write("OK");        }
    }
问:
如何在new page里面添加的用户控件加载的时候执行page_load 也就是要和原请求的页面执行一样的过程谢谢

解决方案 »

  1.   

    http://topic.csdn.net/u/20100323/22/70581f24-30ba-4840-936a-aceae6c75c86.html
      

  2.   

    你可以不使用Page 来承载的,也就是  public partial class Template2 : System.Web.UI.Page因为这样意义不大,可以使用 Generic Handler 来承载的,也就是.ashx文件 
      

  3.   

    因为这样意义不大,可以使用 Generic Handler 来承载的,也就是.ashx文件 
    -----
    不是很明白我试试上面的!
      

  4.   

                System.IO.StringWriter writer = new System.IO.StringWriter();
                Server.Execute(page, writer, false);
                Response.Write(writer.ToString());
    -----------------
    是不是因为new page出来的不执行onload方法 呢?还有,如何把当前的Request对像传给 new Page()出来的page
    因为:
    Server.Execute(page, writer, false);
    那边Request得到的对像和当前页面的Request对像不一样谢谢
      

  5.   


    <%@ WebHandler Language="C#" Class="Handler" %>using System;
    using System.Web;public class Handler : IHttpHandler {
        
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";        System.Web.UI.Page page = new System.Web.UI.Page();
            System.Web.UI.Control control = page.LoadControl("~/UserControl/Nav.ascx");        page.Controls.Add(control);        System.IO.StringWriter writer = new System.IO.StringWriter();        context.Server.Execute(page, writer, false);        
            
            context.Response.Write(writer.ToString());
            context.Response.End();
        }
     
        public bool IsReusable {
            get {
                return false;
            }
        }}
      

  6.   

    是不是因为new page出来的不执行onload方法 呢?
    --------------------------------------------
    恩,是的
      

  7.   


    还有,如何把当前的Request对像传给 new Page()出来的page
    因为:
    Server.Execute(page, writer, false);
    那边Request得到的对像和当前页面的Request对像不一样谢谢
    ----------------------------Server.Execute(page, writer, true);即可
      

  8.   

    RE:
        public partial class Nav : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e) //在新建的page不执行load事件
            {
                Response.Write("OK");
                Response.Write(System.Web.HttpContext.Current.Request.QueryString["guid"]);        }
        }得没有得到我的Template2.aspx?guid=111
    -----------------
    我想是因为我的这个page是new 出来的,他根本就不会有当前页的Request一样的对像
    所以在Server.Execute的时候就得到不这个guid=111那应该怎么写呢?
      

  9.   

    Server.Execute(page, writer, true);true会 保存 Request.QueryString 和 Request.Form