问题有点拗口。
问题背景:做一个小的网站,所有页面的左侧都有一个共同的列表,用一个datalist做成用户控件实现问题:想在datalist的selectedchang事件编码,将选择的item存入session,但在宿主页面中单击选择后,事件没有被执行。想解决这个问题,用事件冒泡机制能解决吗,还是必须参照如下解决
C:\Documents and Settings\trans\My Documents\为asp_net中的Web用户控件添加属性和事件 - 秋枫@Blog.htm

解决方案 »

  1.   

    sorry,网页连接贴错了http://www.webjx.com/htmldata/2006-05-01/1146472139.html
      

  2.   

    如果没有写错的话,应该是先在用户控件里新增一个事件属性,然后在在datalist的selectedchang事件里把用户控件的事件暴露出来,这样宿主页注册这个用户控件事件即可。。
    为什么没有执行?最简单的办法就是调试首先看selectedchang在用户控件里响应了没有。事件冒泡一般在自定义控件的模板里才用到。
      

  3.   

    应该可以我做过,不过不是datalist,是button,
    贴你的代码
      

  4.   

    谢谢hdt(倦怠):我没有代码,只是今天看到事件冒泡,想印证一下我的猜测
    谢谢:zhongkeruanjian(编程亮子),没有响应,asp.net机制决定了不会响应
      

  5.   

    我觉得应该这么做,datalist用模版,模版里加一个linkbutton,不要用selectIndexchange用
    ItemCommand ,在itemcommand里触发页面的事件
      

  6.   

    TO:hdt(倦怠) 按照我的理解 对于用户控件里面的服务器控件,如果不做特殊处理,是不能接受到click事件的吧
      

  7.   

    那么如何理解下面这段话呢
    用户控件包含 Web 服务器控件时,可以在用户控件中编写代码来处理其子控件引发的事件。例如,如果用户控件包含一个 Button 控件,则可以在用户控件中为该按钮的 Click 事件创建处理程序。默认情况下,用户控件中的子控件引发的事件对于宿主页不可用。但是,可以为用户控件定义事件并引发这些事件,以便将子控件引发的事件通知宿主页。进行此操作的方式与定义任何类的事件一样。有关更多信息,请参见引发事件。参照http://msdn2.microsoft.com/zh-cn/library/fb3w5b53.aspx
      

  8.   

    这就是秋风所做的用户控件中服务器控件事件,无法在页面上写,
    但是,可以为用户控件定义事件并引发这些事件,以便将子控件引发的事件通知宿主页
    宿主页
    通过
     ascx.cs
      public delegate void clickhander( .... );
      public event clickhandler click; 来引出事件
      这里是用户控件中服务器控件的事件处理函数
      protected void button1_click( .. )
      {
         if( click != null )
        {
           click( sender , e ); //这里引发页面的处理函数
        }
      }
      宿主页
     this.UserControl1.Click += new ...;
     来处理