Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.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_Events_Dynamic_Textbox - Fatal编程技术网

C# 添加到动态文本框的动态事件未触发

C# 添加到动态文本框的动态事件未触发,c#,asp.net,events,dynamic,textbox,C#,Asp.net,Events,Dynamic,Textbox,我想在表中添加一些动态文本框,并让它们触发一个事件。 我在创建文本框或访问关于它们的信息方面没有问题,但它们不想触发事件 List<string> txtNames = new List<string>(); txtNames.Add("txtId"); txtNames.Add("txtName"); txtNames.Add("txtQty"); txtNames.Add("txtUnitPrice"); txtName

我想在表中添加一些动态文本框,并让它们触发一个事件。 我在创建文本框或访问关于它们的信息方面没有问题,但它们不想触发事件

    List<string> txtNames = new List<string>();
    txtNames.Add("txtId");
    txtNames.Add("txtName");
    txtNames.Add("txtQty");
    txtNames.Add("txtUnitPrice");
    txtNames.Add("txtExtendedPrice");

    Panel1.Controls.Add(new LiteralControl("\t<tr>\n"));
    TextBox txt;
    foreach (string s in txtNames)
    {
        txt = new TextBox();
        txt.CopyBaseAttributes(Textbox1);
        txt.Text = "";
        txt.BorderWidth = 0;
        txt.ID = s + row;

        Panel1.Controls.Add(new LiteralControl("\t\t<td>"));
        Panel1.Controls.Add(txt);
        Panel1.Controls.Add(new LiteralControl("</td>\n"));

        txt.AutoPostBack = true;
        txt.TextChanged += new EventHandler(txt_TextChanged);

        txt.Text = s;
        count++;
    }
    Panel1.Controls.Add(new LiteralControl("\t</tr>\n"));
    row++;
List txtNames=new List();
txtNames.Add(“txtId”);
添加(“txtName”);
txtNames.Add(“txtQty”);
txtNames.Add(“txtnitprice”);
添加(“txtendedprice”);
Panel1.Controls.Add(新的LiteralControl(“\t\n”);
文本框txt;
foreach(txtNames中的字符串s)
{
txt=新文本框();
txt.copybasetributes(Textbox1);
txt.Text=“”;
txt.BorderWidth=0;
txt.ID=s+行;
Panel1.Controls.Add(新的LiteralControl(“\t\t”);
Panel1.Controls.Add(txt);
Panel1.Controls.Add(新的LiteralControl(“\n”);
txt.AutoPostBack=true;
txt.TextChanged+=新事件处理程序(txt\u TextChanged);
txt.Text=s;
计数++;
}
Panel1.Controls.Add(新的LiteralControl(“\t\n”);
行++;
(面板位于html表中)

此代码位于一个函数中,该函数在页面未回发或单击按钮添加一行文本框时调用

文本框保存到会话中,然后在加载页面上重新加载

我试过制作一个测试文本框,它不是在for循环中创建的,并且它确实会触发文本更改事件

编辑
当从保存的会话加载文本框时,我尝试重新添加文本更改事件,现在它们正在触发函数。

控件和事件应该在Page_Load中重新创建,因为动态控件在请求后丢失。

您应该将方法调用放在OnInit中,而不是pageload中,并仅在不回发时设置文本属性

   protected override void OnInit( EventArgs e)
    {
        base.OnInit(e);
        int row = 0;
        int count = 0;
        List<string> txtNames = new List<string>();
        txtNames.Add("txtId");
        txtNames.Add("txtName");
        txtNames.Add("txtQty");
        txtNames.Add("txtUnitPrice");
        txtNames.Add("txtExtendedPrice");

        Panel1.Controls.Add(new LiteralControl("\t<tr>\n"));
        TextBox txt;
        foreach (string s in txtNames)
        {
            txt = new TextBox();
            //txt.CopyBaseAttributes(Textbox1);
            txt.BorderWidth = 0;
            txt.ID = s + row;

            Panel1.Controls.Add(new LiteralControl("\t\t<td>"));
            Panel1.Controls.Add(txt);
            Panel1.Controls.Add(new LiteralControl("</td>\n"));

            txt.AutoPostBack = true;
            txt.TextChanged += (sndr, evt) => { Response.Write(((Control)sndr).ID + " --- " + ((TextBox)sndr).Text); };

            if(!IsPostBack)
                txt.Text = s;
            count++;
        }
        Panel1.Controls.Add(new LiteralControl("\t</tr>\n"));
        row++;

    }
protected override void OnInit(事件参数e)
{
碱基.奥尼特(e);
int行=0;
整数计数=0;
List txtNames=新列表();
txtNames.Add(“txtId”);
添加(“txtName”);
txtNames.Add(“txtQty”);
txtNames.Add(“txtnitprice”);
添加(“txtendedprice”);
Panel1.Controls.Add(新的LiteralControl(“\t\n”);
文本框txt;
foreach(txtNames中的字符串s)
{
txt=新文本框();
//txt.copybasetributes(Textbox1);
txt.BorderWidth=0;
txt.ID=s+行;
Panel1.Controls.Add(新的LiteralControl(“\t\t”);
Panel1.Controls.Add(txt);
Panel1.Controls.Add(新的LiteralControl(“\n”);
txt.AutoPostBack=true;
txt.TextChanged+=(sndr,evt)=>{Response.Write((控制)sndr.ID++“--”+((文本框)sndr.Text);};
如果(!IsPostBack)
txt.Text=s;
计数++;
}
Panel1.Controls.Add(新的LiteralControl(“\t\n”);
行++;
}

上面的代码在哪里?Page_Load?它位于一个函数中,当页面未回发时,或当我单击按钮添加其他一行文本框时,会调用该函数。工作的测试文本框是否也已保存并重新创建?否每次在Page Load事件中都会创建它。我将它们保存到会话中,然后在Page_Load上重新加载它们。我正在查找所有文本框,将它们保存到列表并将该列表保存到会话。然后加载时,我只需获取文本框列表,并以几乎完全相同的方式将它们添加回。