Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态按钮不调用单击事件_C#_Asp.net_Dynamic - Fatal编程技术网

C# 动态按钮不调用单击事件

C# 动态按钮不调用单击事件,c#,asp.net,dynamic,C#,Asp.net,Dynamic,我的页面中有一个asp表,我从代码隐藏中创建它的内容。对于这个特定的TableRow,我需要创建一个多行文本框和一个按钮,当我单击一个按钮时,我会将文本框内容保存到数据库中。但是我的click函数没有被调用。这是我的密码: ContentPlaceHolder cont = new ContentPlaceHolder(); HtmlGenericControl br = new HtmlGenericControl(); HtmlGenericControl br2 = new HtmlGen

我的页面中有一个asp表,我从代码隐藏中创建它的内容。对于这个特定的TableRow,我需要创建一个多行文本框和一个按钮,当我单击一个按钮时,我会将文本框内容保存到数据库中。但是我的click函数没有被调用。这是我的密码:

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();
 }