【问题标题】:Retrieve data from dynamically created controls从动态创建的控件中检索数据
【发布时间】:2011-08-30 16:29:30
【问题描述】:

我在主(静态)下拉列表的选择更改事件上动态创建多个下拉列表。这些是在默认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 server 的下拉列表的选择更改事件中运行。但动态创建的下拉菜单未设置为在服务器上运行

【问题讨论】:

  • 请不要在问题前加上“ASP.NET:”。在Stack Overflow,我们使用标签对问题进行分类。
  • 如果您在回发时检索值时遇到问题,可能是您在页面生命周期中创建动态控件为时已晚。尝试在您的网络表单初始化时添加它们 (OnInit)

标签: c# asp.net


【解决方案1】:

这些下拉框是runat="server"吗?含义:您是否通过背后的代码通过 .net 回发事件以编程方式创建它们?如果是这样,只需像使用任何其他控件一样获取所选值,然后通过查询字符串或 cookie 传递它。

这些是标准的 html 下拉列表吗?祝你好运从代码隐藏中阅读它们。这让你们都陷入了视图状态,虽然在技术上可行,但实际上是不可行的。

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

【讨论】:

  • 不,将选定的值放入 cookie 是一个可怕的想法。这可以通过正确理解页面生命周期来处理。
  • 以上代码在设置为 runat server 的下拉列表的选择更改事件中运行。但动态创建的下拉菜单未设置为在服务器上运行。
  • 为什么这是一个可怕的想法?示例:“选择您的语言 [英语、西班牙语、德语]” cookie 不是此类信息的最佳位置吗?他没有提供有关下拉列表内容的任何线索(直到编辑)。因此,cookie 与任何跨页面存储数据的方式一样有效。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多