用母摸板新建的aspx页面,有个repeater的数据里面要动态生成ImageButton,怎么我这么们搞了后,ImageButton的Click失效啊,完全没反映,下面是代码:
    protected void Ascx_Repeater1_Bound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            HiddenField hf = (HiddenField)e.Item.FindControl("HiddenField1");
            string ZhuangTai = hf.Value.ToString();
            if (ZhuangTai == 1)
            {
                PlaceHolder ph = (PlaceHolder)e.Item.FindControl("PlaceHolder1");
                ImageButton tupian = new ImageButton();
                tupian.ImageUrl = "";
                tupian.CommandArgument = "正确";
                tupian.Width = Unit.Pixel(50);
                tupian.Height = Unit.Pixel(20);
                tupian.Click += new ImageClickEventHandler(btn_Click);
                ph.Controls.Add(tupian);
            }
        }
    }    protected void btn_Click(object sender, ImageClickEventArgs e)
    {
        ImageButton btn = (ImageButton)sender;
        string ceshi=btn.CommandArgument;
        Response.Write("<script>alert('错误')</script>");    }

解决方案 »

  1.   

    “动态生成ImageButton 并添加事件” 这部分代码需要放到 Page_Load 里边执行。
      

  2.   

    DataList控件有一个DataCommand事件的,这样不能写吗?
      

  3.   

    这里有详细的东西: http://topic.csdn.net/t/20040810/12/3259505.html
      

  4.   

    动态生成控件应放在Page_Load里!!
    不用时Visibled=false;
    用时Visibled=true;
      

  5.   

    会不会是这个时间被上面的控件接收到没有没有冒泡呢?期待答案!我感觉用visable来控制会好很多!
      

  6.   

    所有你动态生成的控件,每当页面回发时(page_load完成之前)你都要给它重新创建,而且要确保id跟上一次页面输出html时的id相同。你只是在Ascx_Repeater1_Bound中创建,可见回发时并没有你动态创建的东西,而仅仅是回发之后重新绑定时才又创建了这个东西。我现在不太写动态创建控件的demo程序了,可以自己再在网上找一些demo试试看。不过我要强调,你从一开始就要在页面上放一个button并且每当写一些代码就经常用这个button测试回发,这样你的程序应该很早就会发现点这个button后页面上的动态内容全都无法显示,你也不至于等到写了很多代码之后才发现设计问题而推倒重写。你完全可以在设计窗口生明,而不要写代码。往往我们会想当然地认为把一些东西写成代码动态生成的就能提高速度,实际上如果你仔细测试,这个价值不值几毛钱(甚至是降低了速度),而你的开发所花费的代价是巨大的。原本你只要在设计代码中简单地声明一下就够了,例如:<asp:ImageButton ID="ImageButton1" runat="server" CommandArgument="xxx" OnClick="btn_click" Visible='<%# (int)Eval("Age")<18 %>' />
    这里当Age不足18岁才会显示这个ImageButton1。这样本来很简单的东西,写成代码反而很难维护扩展。
      

  7.   


      我当初就是这样做的,不过只是repeater的话 并不需要这样做
      

  8.   

    Ascx_Repeater1_Bound 是在ItemBounding 是发生,
    而 
    事件回调是在此之前, 所以,点击后得不到响应

    Ascx_Repeater1_Create 时对ImageButton 指定事件代理
      

  9.   

    http://www.vckbase.com/里有很多
      

  10.   

    发错了
    http://www.cnblogs.com/lem-worm/articles/867962.html