我在页面上有以下简单控件
WebForm1.aspx
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
<br />
<asp:Label ID="lblContent" runat="server" ></asp:Label>
WebForm1.aspx.cs
中的一些代码:
protected void Page_Load(object sender, EventArgs e)
{
Button btn = new Button();
btn.ID = "btnTest";
btn.Text = "I was dynamically created";
btn.Click += new EventHandler(btnTest_Click);
Panel1.Controls.Add(btn);
}
void btnTest_Click(object sender, EventArgs e)
{
lblContent.Text = "btnTest_Click: " + DateTime.Now.ToString();
}
简而言之,当我在btnTest
事件中动态创建一个Button(Page_Load
)并为该按钮分配事件处理程序btnTest_Click
时。点击事件然后,在加载页面时,我看到btnTest
出现,当点击它时,调用事件处理程序btnTest_Click
。好的,没问题。
我遇到问题但是当我尝试以下方案时......首先,我在设计师模式下向页面添加了一个按钮。
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
<asp:Button ID="btnCreateDynamically" runat="server"
Text="Create Button Dynamically"
onclick="btnCreateDynamically_Click" />
<br />
<asp:Label ID="lblContent" runat="server" ></asp:Label>
我将代码从Page_Load
移动到btnCreateDynamically
的按钮事件处理程序,如下所示
protected void btnCreateDynamically_Click(object sender, EventArgs e)
{
Button btn = new Button();
btn.ID = "btnTest";
btn.Text = "I was dynamically created";
btn.Click += new EventHandler(btnTest_Click);
Panel1.Controls.Add(btn);
}
现在运行WebApp并单击btnCreateDynamically
时,会创建btnTest但是当我单击btnTest
时,它的事件处理程序未被调用???
为什么不呢? 我怎样才能做到这一点?
答案 0 :(得分:2)
您应该在Page的Init事件处理程序中添加动态控件,以便适当地触发ViewState和Events。
尝试这样做:
protected void Page_Init(object sender, EventArgs e)
{
Button btn = new Button();
btn.ID = "btnTest";
btn.Text = "I was dynamically created";
btn.Click += new EventHandler(btnTest_Click);
Panel1.Controls.Add(btn);
}
答案 1 :(得分:1)
您需要re-create dynamic control on each postback,查看我之前对类似问题的回答here