什么自动生成的控件无法响应事件呢?代码如下.public partial class userctr_Pager : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!Page.IsPostBack)
       // {
           // CreateLinks();
        //}
        
    }
    protected void Page_PreRender(object sender, EventArgs e)
    {
        CreateLinks();
    }
    public void CreateLinks()
    {
        //
        LinkButton lb = new LinkButton();
        lb.CommandArgument = "0";
        lb.Text = " myLink ";
        lb.CommandName = "goToPage";
        lb.Command += new CommandEventHandler(SetPagerState);
        linkPanel.Controls.Add(lb);
 
    }
    public void SetPagerState(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "goToPage")
        {            ViewState["CurrentPage"] = currentPage.ToString();            
        }
    }    public userctr_Pager()
    { }}

解决方案 »

  1.   

    为什么只能在Page_Load下添加的控件才能响应自定义的事件吗?
      

  2.   

    你对.NET 页面生成还不是很了解。当你postback的时候那么页面会重新加载 也就是执行page_load 而这个时候页面的生成是根据aspx文件中的控件来生成HTML的 而你动态加载的控件因为不会保存,所以在重新post_back的时候就会丢失,假如想不丢失的话,只有在Post_back的时候再次生成。不过,即使再次生成的控件,依然是能够保存上一次的数据,这个不知道是怎么做到的(微软牛逼阿)。
      

  3.   

    据我了解,自动生成的控件,如果要响应事件,须在Page_Load之前进行加载(具体原因不太清楚,也许是在pageload事件后不能初始化控件的原因吧.)
    "即使再次生成的控件,依然是能够保存上一次的数据"这个还是第一次听说,谢谢.
      

  4.   

    Page_load是根据ASPX文件中存在空间标签生成对应的页面,而触发事件是在page_load之后的 所以当你的控件生成在!IsPostBack中的时候 Page_load是加载不到自动生成的控件。我不知道你这段代码是在哪得
    protected void Page_PreRender(object sender, EventArgs e)
        {
            CreateLinks();
        }我的猜测是不是注册了这个事件 this.Page.PreRender += new System.EventHandler(this.Page_PreRender);但preRender事在控件呈现之前触发 也就是说这之前其实页面已经生成,他的实际触发在
    lb.Command += new CommandEventHandler(SetPagerState);这个触发事件之后。
      

  5.   

    关键是顺序错了控件的事件触发Load之后PreRender之前所以你这个事件永远是不会触发的
      

  6.   

    因为你在prerender中注册的事件.而这个顺序已经完成了.你再注册有什么用呢
      

  7.   

    你需要在也面加载的时候调用 CreateLinks(); 
      

  8.   

    如果我把生成的控件放在UpdatePanel里面,那生生成控件是不是不能在Page_Load里面实现,否则好象不能异步更新了.