自己定义控件
public class MYDropDownList : DropDownList
{
   protected override void OnPreRender(EventArgs e)
   {
    ……
    this.SelectedIndexChanged += new System.EventHandler(ddlChanged);
   }   protected void ddlChanged(object sender, EventArgs e)
   {
     ……       
   }
}在aspx里的repeater里使用控件,OnPreRender里代码执行了,但SelectedIndexChanged 后,ddlChanged 方法不执行,为什么事件没有注册上?

解决方案 »

  1.   

    SelectedIndexChanged是在postback后执行
      

  2.   

    为何不放到OnInit或OnLoad里注册!
      

  3.   

    因为我是要在页面调用这个控件时传值过来组成datasource
      

  4.   

    this.Attributes.Add("onchange", "<script language=javascript>window.location.href='members/'+this.options[this.selectedIndex].value+'.aspx'</script>");这么写有错吗?
      

  5.   

    必须在page_load(对于2.0是page_loadComplete)结束之前注册事件才能触发。你可以在你的控件的page_load里或者createChildControls里注册事件。
      

  6.   

    this.Attributes.Add("onchange", "<script language=javascript>window.location.href='members/'+this.options[this.selectedIndex].value+'.aspx'</script>");这么写有错吗?
    ——————————————————————————————————————
    不需要“<script></script>”。
      

  7.   

    要在页面调用这个控件时传值过来组成datasource,这段代码只能写在OnPreRender里吗?
      

  8.   

    “页面调用这个控件时传值过来组成datasource”的时候在创建控件内容时根本不需要注册事件,而仅需要将参数值保存进ViewState。当页面刷新,控件必须重建,此时必须从ViewState中取出参数值创建内容,此时才需要注册事件,但这是在页面装载事件结束之前就要结束的,asp.net紧接着触发事件,如果在之后才注册事件则没有机会触发。你的控件在什么时候绑定数据源?
      

  9.   

    功能要求:
    页面调用如<命名空间:MYDropDownList value=""> </命名空间:MYDropDownList>控件就要根据这个value来找到数据绑定然后页面触发SelectedIndexChanged需要触发注册事件哪位给个例子
      

  10.   

    现在数据绑定写在
    OnPreRender(EventArgs e)
    {
      int sid = Convert.ToInt32(this.Value);//取得传来的值
    }
    写在别的地方得不到值
      

  11.   

    然后就不知道怎么注册上事件能得到用户选择的listitem的值了?衰啊!