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_.net_Web Applications - Fatal编程技术网

C# 如何为动态创建的控件保留数据?

C# 如何为动态创建的控件保留数据?,c#,asp.net,.net,web-applications,C#,Asp.net,.net,Web Applications,我有以下情况: 我有两个下拉列表(DDL)启用了自动回发功能 当用户从第一个DDL中选择内容时,他可以从第二个DDL中选择内容 当用户从第二个DDL中选择某个内容时,我打开数据库(SQL查询的WHERE子句由DDL中的值填充),并动态创建几个文本框、标签和按钮,并将它们放置在占位符中 问题是:当我单击一些动态创建的按钮时,什么也没有发生,并且我无法从动态创建的框中检索数据。此外,占位符内容丢失(所有控件) 所以我的问题是:如何在回发时保留动态创建的控件中的数据 我在这个网站上列出了很多类似的

我有以下情况:

  • 我有两个下拉列表(DDL)启用了自动回发功能
  • 当用户从第一个DDL中选择内容时,他可以从第二个DDL中选择内容
  • 当用户从第二个DDL中选择某个内容时,我打开数据库(SQL查询的WHERE子句由DDL中的值填充),并动态创建几个文本框、标签和按钮,并将它们放置在占位符中
问题是:当我单击一些动态创建的按钮时,什么也没有发生,并且我无法从动态创建的框中检索数据。此外,占位符内容丢失(所有控件)

所以我的问题是:如何在回发时保留动态创建的控件中的数据

我在这个网站上列出了很多类似的文章,没有一篇能解决我的问题。另一件事是-我不能使用视图状态或会话

代码是:

public Button btn1 = new Button();
public TextBox txtBoxC1 = new TextBox();
public TextBox txtBoxC2 = new TextBox();
public TextBox txtBoxC3 = new TextBox();
...
...
...
protected void ddl2_SelectedIndexChanged(object sender, EventArgs e)
{
 ...
 ...
 if some conditions are met:
 ...
 ...
 String CS4 = ConfigurationManager.ConnectionStrings["connStringName"].ConnectionString;
 using (SqlConnection conn4 = new SqlConnection(CS4))
 {
  SqlCommand cmd4 = new SqlCommand("Select * from table where column1=" + 
  Convert.ToInt32(ddl2.SelectedValue)+" order by column1", conn4);
  conn4.Open();
  SqlDataReader rdr = cmd4.ExecuteReader();
  while (rdr.Read())
  {
    txtBoxC1.Text = rdr["column1"].ToString(); txtBoxC1.MaxLength = 3; txtBoxC1.Columns = 3; txtBoxC1.ID = ddl2.SelectedValue + "1";
    txtBoxC2.Text = rdr["column2"].ToString(); txtBoxC2.MaxLength = 3; txtBoxC2.Columns = 3; txtBoxC2.ID = ddl2.SelectedValue + "2";
    txtBoxC3.Text = rdr["column3"].ToString(); txtBoxC3.MaxLength = 3; txtBoxC3.Columns = 3; txtBoxC3.ID = ddl2.SelectedValue + "3";
    btn1.Text = "click me"; btn1.ID = ddl1.SelectedValue; btn1.Click += btn1_Click;
    phDynamic.Controls.Add(btn1);
    phDynamic.Controls.Add(txtBoxC1);
    phDynamic.Controls.Add(txtBoxC2);
    phDynamic.Controls.Add(txtBoxC3);
  }
 }
}
...
...
...
private void btn1_Click(object sender, EventArgs e)
{
  Response.Write(txtBoxC1.Text+txtBoxC2.Text+txtBoxC3.Text);
}

因此,我没有从我的3个文本框中返回值,而是什么也没有返回,而且我还丢失了占位符控件。

Create
DataTable
动态添加一行。。。在
会话中保存
DataTable
并继续…..为什么不能使用视图状态或会话?因为它在我的环境中被禁用。所以没有会话和视图状态。然后我认为您必须将状态存储在SQL Server数据库中的临时表中。这听起来怎么样?也许你应该重新评估你的设计。当用户做一些简单的事情,比如更改dropdownlist中的值时,您真的希望整个表单都发布到服务器,并且服务器必须重新生成响应吗?那是一大笔开销。这对资源和用户都是不利的。相反,为什么不在客户端使用一些来向服务器发出请求呢?开销小得多,更容易创建积极的用户体验。