C# 从动态创建的控件中检索数据

C# 从动态创建的控件中检索数据,c#,asp.net,C#,Asp.net,我在主(静态)下拉列表的selection changed事件上动态创建几个下拉列表。它们是在默认的表格的表格单元格中创建的。当点击提交按钮时,我需要加载一个新页面,其中包含所选的下拉列表值作为参数。基本上我需要在第二页获得下拉结果 以下是创建Dropbox的方法: while (reader.Read()) { pcID = int.Parse(reader["fk_pcID"].ToString()); pcDesc = GetpcDescr

我在主(静态)下拉列表的selection changed事件上动态创建几个下拉列表。它们是在默认的
表格的
表格单元格中创建的。当点击提交按钮时,我需要加载一个新页面,其中包含所选的下拉列表值作为参数。基本上我需要在第二页获得下拉结果

以下是创建Dropbox的方法:

    while (reader.Read())
    { 
        pcID = int.Parse(reader["fk_pcID"].ToString());
        pcDesc = GetpcDescription(pcID);
        List<Product> prodList = GetProductsBypcID(pcID);
        DropDownList ddList = new DropDownList();
        ddList.ID = "ddlPC" + pcID;
        foreach(Product prod in prodList)
        {
            ddList.Items.Add(new ListItem(prod.ProductName, prod.ProductID.ToString()));
        }
        TableCell cell1 = new TableCell();
        cell1.Text = pcDesc;

        TableCell cell2 = new TableCell();
        cell2.Controls.Add(ddList);

        TableRow row = new TableRow();
        row.Cells.Add(cell1);
        row.Cells.Add(cell2);

        table.Rows.Add(row);  
    }
while(reader.Read())
{ 
pcID=int.Parse(reader[“fk_pcID”].ToString());
pcDesc=GetpcDescription(pcID);
List prodList=GetProductsBypcID(pcID);
DropDownList ddList=新的DropDownList();
ddList.ID=“ddlPC”+pcID;
foreach(产品列表中的产品产品)
{
ddList.Items.Add(新列表项(prod.ProductName、prod.ProductID.ToString());
}
TableCell cell1=新的TableCell();
cell1.Text=pcDesc;
TableCell cell2=新的TableCell();
cell2.Controls.Add(ddList);
TableRow行=新TableRow();
row.Cells.Add(cell1);
行。单元格。添加(单元格2);
table.Rows.Add(行);
}

编辑:上面的代码在设置为runat server的下拉列表的selection changed事件中运行。但是动态创建的下拉列表未设置为在服务器上运行这些下拉框是不是
runat=“server”
?意思是:您是否通过.net post back事件通过代码隐藏程序创建了它们?如果是这样,只需获得与使用任何其他控件相同的选定值,然后通过查询字符串或cookie传递它

这些是标准的html下拉列表吗?祝你好运,从后面的代码中读取它们。这会让你们在viewstate中纠缠不清,虽然技术上可行,但实际上是不可行的


如果第二个选项是这样的话,那么让您的按钮指向一个JavaScript函数可能是一个更好的选项,该函数获取选定的值,然后通过querystring传递它们。然后在另一个页面上,您可以从代码隐藏或客户端读取查询字符串。

这些下拉框是
runat=“server”
?意思是:您是否通过.net post back事件通过代码隐藏程序创建了它们?如果是这样,只需获得与使用任何其他控件相同的选定值,然后通过查询字符串或cookie传递它

这些是标准的html下拉列表吗?祝你好运,从后面的代码中读取它们。这会让你们在viewstate中纠缠不清,虽然技术上可行,但实际上是不可行的


如果第二个选项是这样的话,那么让您的按钮指向一个JavaScript函数可能是一个更好的选项,该函数获取选定的值,然后通过querystring传递它们。然后在另一个页面上,您可以从代码隐藏或客户端读取查询字符串。

这听起来是DynamicControlsPlaceholder的一个很好的候选者。它将自动保留您的动态控件,而无需在页面上添加任何其他代码。如果需要在SelectedIndexChanged上创建控件,我认为这可能是最简单的解决方案

这是一个免费组件,你可以在这里下载


这听起来是DynamicControlsPlaceholder的一个很好的候选者。它将自动保留您的动态控件,而无需在页面上添加任何其他代码。如果需要在SelectedIndexChanged上创建控件,我认为这可能是最简单的解决方案

这是一个免费组件,你可以在这里下载


请不要在问题前面加上“ASP.NET:”。在上,我们使用标记对问题进行分类。如果在回发时检索值时遇到问题,则很可能是在页面生命周期中创建动态控件太晚。尝试在Web表单初始化(OnInit)时添加它们。请不要在问题前面加上“ASP.NET:”。在上,我们使用标记对问题进行分类。如果在回发时检索值时遇到问题,则很可能是在页面生命周期中创建动态控件太晚。尝试在Web表单初始化时添加它们(OnInit)否,将所选值放入cookie是一个可怕的想法。这可以通过正确理解页面生命周期来处理。上面的代码在设置为runat server的下拉列表的selection changed事件中运行。但动态创建的下拉列表并没有设置为在服务器上运行。为什么这是一个可怕的想法?示例:“选择您的语言[英语、西班牙语、德语]”cookie不是存储此类信息的最佳位置吗?他没有给出任何关于下拉列表内容的线索(直到编辑)。因此,cookie与任何跨页面存储数据的方法一样有效。不,将所选值放入cookie是一个可怕的想法。这可以通过正确理解页面生命周期来处理。上面的代码在设置为runat server的下拉列表的selection changed事件中运行。但动态创建的下拉列表并没有设置为在服务器上运行。为什么这是一个可怕的想法?示例:“选择您的语言[英语、西班牙语、德语]”cookie不是存储此类信息的最佳位置吗?他没有给出任何关于下拉列表内容的线索(直到编辑)。因此,cookie与任何跨页面存储数据的方法一样有效。