gpt4 book ai didi

asp.net - 动态创建按钮 OK 但它的事件处理程序没有执行?

转载 作者:行者123 更新时间:2023-12-04 06:30:11 24 4
gpt4 key购买 nike

我在页面上有以下简单控件
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 中动态创建一个按钮( 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 时它的事件处理程序没有被调用???

为什么不?
我怎样才能使这项工作?

最佳答案

您应该在 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);
}

关于asp.net - 动态创建按钮 OK 但它的事件处理程序没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com