日期:2014-05-18  浏览次数:20479 次

写了个控件,可事件总不执行
public class xRepeater : Repeater
  {  

protected override void RenderControl(HtmlTextWriter writer)
 {
  HtmlGenericControl pl = new HtmlGenericControl();
  System.Web.UI.WebControls.Button BtnPrev = new System.Web.UI.WebControls.Button();
  BtnPrev.ID = "prev";
  BtnPrev.Attributes.Add("CssClass", "goBtn");
  BtnPrev.Style.Add("height", "21px");
   
  BtnPrev.Click += new System.EventHandler(Page_OnClick);
  BtnPrev.Text = "上一页";

  System.Web.UI.WebControls.Button BtnNext = new System.Web.UI.WebControls.Button();
  BtnNext.ID = "next";  
  BtnNext.Attributes.Add("CssClass", "goBtn");
  BtnNext.Style.Add("height", "21px");
  BtnNext.Click += new System.EventHandler(Page_OnClick);
  BtnNext.Text = "下一页";
   

  pl.Controls.Add(new LiteralControl(pager));
  pl.Controls.Add(BtnNext);
  pl.Controls.Add(BtnPrev);


  //this.Controls.Add(pl);

  StringWriter sw = new StringWriter();
  HtmlTextWriter tw = new HtmlTextWriter(sw);
  pl.RenderControl(tw);



  writer.Write(sw.ToString());
  base.RenderControl(writer);

  }

private void Page_OnClick(object sender, System.EventArgs e)
{
  ......
}
}

------解决方案--------------------
RenderControl?

我不知道怎样能够在三言两语中给你说清楚了!


首先,你要理解什么叫做页面(以及页面上所有控件的)生命周期,理解状态以及事件触发的机理(IPostbackDataHandler、IPostbackEventHandler分别被页面什么时候调用、每一次调用都处理什么任务)。

你的事件注册只有在Page_Load结束之前完成,才能被触发。在Render阶段,紧接着这个控件就随着页面对象输出html后被自动释放而被释放掉了,这个阶段注册时间处理程序毫无意义。