一个用户定义控件,里面包含一个button,已经可以把click事件delegete到用户控件中处理.这个控件是动态加到页面中.我的问题是:为什么这个click事件只能catch一次,当在用户控件中执行完代码(功能包括改变空间的内容,然后刷新)后,就不能执行了,必须再点一次才行.就好像第二次的刷新没有把click事件加到控件上?why?

解决方案 »

  1.   

    你是怎么装载你的控件的? 对于动态控件,在postback后,需要记住在Load或其前重新装载
      

  2.   

    如下:
    baseUserControl c_2 = (baseUserControl)LoadControl("baseUserControl.ascx");
    c_2.ID = "2";
    c_2.myClick += new EventHandler(c_b_Click);
    test.Rows[0].Cells[1].Controls.Add(c_2);
      

  3.   

    本来在page_load里,后来挪到oage_init里,好象也不行.
      

  4.   

    别放在if (!IsPostBack)里,要这样void Page_Load(...)
    {
    baseUserControl c_2 = (baseUserControl)LoadControl("baseUserControl.ascx");
    c_2.ID = "2";
    c_2.myClick += new EventHandler(c_b_Click);
    test.Rows[0].Cells[1].Controls.Add(c_2);
    }
      

  5.   

    1.baseUserControl.ascx:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="baseUserControl.ascx.cs" Inherits="baseUserControl" %>
    <asp:Button ID="btn1" runat="server" Text="hi" OnClick="btn1_Click" />
    baseUserControl.ascx.ca:public partial class baseUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        public event EventHandler myClick;
        protected void btn1_Click(object sender, EventArgs e)
        {
            Session["btn_id"] = btn1.ID;
            if (myClick != null)
            {
                EventArgs args = new EventArgs();
                myClick(this, args);
            }
        }
    }2.TestUserControl.ascx:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="TestUserControl.ascx.cs" Inherits="TestUserControl" %>
    <%@ Register Src="baseUserControl.ascx" TagName="baseUserControl" TagPrefix="uc1" %>
    <asp:Table ID="test" BorderWidth="1" GridLines="Both" runat="server" >
        <asp:TableRow>    </asp:TableRow>
    </asp:Table>
    <asp:Label ID="l1" runat="server" ></asp:Label>TestUserControl.ascx.cs:
    public partial class TestUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            doFunction();
        }
        private void doFunction()
        {
            test.Rows[0].Cells.Clear();
            TableCell tc1 = new TableCell();
            baseUserControl c_1 = (baseUserControl)LoadControl("baseUserControl.ascx");
            c_1.ID = "1";
            c_1.myClick += new EventHandler(c_b_Click);
            tc1.Controls.Add(c_1);
            test.Rows[0].Cells.Add(tc1);
        }    protected void c_b_Click(object sender, EventArgs e)//就是这个event,点两次才执行一次.why?
        {
            doFunction();//重新生成这个table,是必须的.
            l1.Text = l1.Text + "a";
        }
    }3.test.aspx:
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %><%@ Register Src="TestUserControl.ascx" TagName="TestUserControl" TagPrefix="uc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <link rel="stylesheet" type="text/css" href="mla.css" />
        <title>Untitled Page</title>
    </head>
    <body>
    <form id="loungeForm" runat="server">
        <uc1:TestUserControl ID="TestUserControl1" runat="server" />
    </form>
    </body>
    </html>