2011-08-30 51 views
1

我在主(静态)下拉列表的选择已更改的事件上动态地创建了几个下拉列表。这些创建在默认TableTableCell中。当点击提交按钮时,我需要加载一个新的页面,并将选定的下拉列表值作为参数。基本上我需要在第二页中获得下拉结果。从动态创建的控件中检索数据

这是如何创建投寄箱:

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

编辑:上述代码运行在被设定为RUNAT服务器下拉的选择更改事件。但是动态创建的下拉列表未设置为在服务器上运行

+2

请不要在“ASP.NET:”前加问题。在[so]上,我们使用标签对问题进行分类。 –

+2

请问一些代码? –

+0

如果您在回发中检索值时遇到问题,则可能是您在页面生命周期中创建的动态控件太晚。尝试添加它们,当您的webform初始化(OnInit) –

回答

1

这些下拉框是runat="server"?含义:你是通过后面的代码通过.net后期事件以编程方式创建它们的吗?如果是这样,只需将选定的值与任何其他控件的值相同,然后将其传递给查询字符串或cookie即可。

这些标准的html下拉列表?祝好运,从代码隐藏中读取它们。这让你们都陷入了混乱状态,尽管技术上可行,但实际上并不可行。

如果第二个选项是这种情况,那么让您的按钮定位一个获取选定值的JavaScript函数,然后通过querystring传递它们可能会更好。然后在另一页上,您可以从代码隐藏或客户端读取querystrings。

+0

不,将选定的值放入cookie是一个可怕的想法。这可以通过正确理解页面生命周期来处理。 –

+0

上述代码在设置为runat服务器的下拉列表中选择已更改的事件上运行。但动态创建的下拉列表不会设置为在服务器上运行。 – devnull

+0

为什么这是一个可怕的想法?例如:“选择您的语言[英语,西班牙语,德语]”Cookie不是这类信息的最佳地点吗?他没有给出关于下拉内容的任何线索(直到编辑)。因此,Cookie与存储跨页面数据的方式一样有效。 –

0

这听起来很适合DynamicControlsPlaceholder。它将自动保留您的动态控件,而不需要在页面上添加任何代码。如果您需要创建控件OnSelectedIndexChanged,我认为这可能是最简单的解决方案。

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

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx