C# 动态按钮不调用单击事件
我的页面中有一个asp表,我从代码隐藏中创建它的内容。对于这个特定的TableRow,我需要创建一个多行文本框和一个按钮,当我单击一个按钮时,我会将文本框内容保存到数据库中。但是我的click函数没有被调用。这是我的密码:C# 动态按钮不调用单击事件,c#,asp.net,dynamic,C#,Asp.net,Dynamic,我的页面中有一个asp表,我从代码隐藏中创建它的内容。对于这个特定的TableRow,我需要创建一个多行文本框和一个按钮,当我单击一个按钮时,我会将文本框内容保存到数据库中。但是我的click函数没有被调用。这是我的密码: ContentPlaceHolder cont = new ContentPlaceHolder(); HtmlGenericControl br = new HtmlGenericControl(); HtmlGenericControl br2 = new HtmlGen
ContentPlaceHolder cont = new ContentPlaceHolder();
HtmlGenericControl br = new HtmlGenericControl();
HtmlGenericControl br2 = new HtmlGenericControl();
TextBox texto = new TextBox();
Button btnSalvarTexto = new Button();
btnSalvarTexto.ID = "btnSalvar";
btnSalvarTexto.Click += new EventHandler(btnSalvarTexto_Click);
btnSalvarTexto.CssClass = "botao";
btnSalvarTexto.Text = "Salvar";
cont.ID = "Placeholder";
texto.ID = "TextBoxObs";
texto.Width = 300;
texto.TextMode = TextBoxMode.MultiLine;
texto.Rows = 3;
br.InnerHtml = "<br><br><div style='width:300px;background-color:#fff;padding:15px;'>";
cont.Controls.Add(br);
cont.Controls.Add(texto);
cont.Controls.Add(btnSalvarTexto);
br2.InnerHtml = "</div>";
cont.Controls.Add(br2);
td2.Controls.Add(cont);
tr2.Cells.Add(td2);
TablePrecos.Rows.Add(tr2);
我的代码怎么了?我在btnSalvarTexto\u Click
函数中设置了一个断点,但它从未到达该断点
编辑:好的,创建这些控件的函数称为CriarCapa,它在Page\u LoadComplete
中调用,如下所示:
protected void Page_LoadComplete(object sender, EventArgs e)
if (!IsPostBack)
{
CriarCapa();
}
所以,是的,我正在测试它是否不是回发。您需要在每次页面加载时重新创建该按钮,因为它会被单击的按钮清除并导致回发
该按钮会导致回发,从而在实际事件处理程序之前触发页面生命周期中的
Page\u Load
事件。由于按钮是动态创建的,因此当页面加载发生并且您的代码仅在第一次创建动态内容时,不会创建按钮,也不会为单击事件连接事件处理程序。您需要在每次页面加载时重新创建按钮,因为它正在被点击的按钮擦除,并导致回发
该按钮会导致回发,从而在实际事件处理程序之前触发页面生命周期中的
Page\u Load
事件。由于按钮是动态创建的,因此当页面加载发生并且代码仅在第一次创建动态内容时,不会创建按钮,也不会为单击事件连接事件处理程序。控件创建代码在哪里?在页面加载中?每次回发时都会调用该代码块吗?发布您的页面加载
代码。我在页面加载完成
中仅在第一个输入时调用它。控件创建代码在哪里?在页面加载中?每次回发时都会调用代码块吗?发布你的页面加载
代码。我只在第一次输入时才在页面加载完成
中调用它。我将对你的语言进行一点质疑,因为这应该有助于蒂亚戈正确思考它。没有任何内容被“擦除”。ASP在每次回发时都会重新创建页面对象,因为ASP是无状态的。ASP从aspx文件创建页面对象,然后使用POST中的信息(包括ViewState)对其进行水合物化。它使用这些信息来决定是否应该运行任何事件处理程序。如果创建按钮的代码没有在每篇文章上运行,那么就没有启动事件的按钮。我将对您的语言进行一点质疑,因为这应该有助于Thiago正确地思考它。没有任何内容被“擦除”。ASP在每次回发时都会重新创建页面对象,因为ASP是无状态的。ASP从aspx文件创建页面对象,然后使用POST中的信息(包括ViewState)对其进行水合物化。它使用这些信息来决定是否应该运行任何事件处理程序。如果创建按钮的代码没有在每个帖子上运行,则没有触发事件的按钮。
protected void Page_LoadComplete(object sender, EventArgs e)
if (!IsPostBack)
{
CriarCapa();
}