【问题标题】:The SelectedValue of DropDownLists are not set correctlyDropDownLists 的 SelectedValue 设置不正确
【发布时间】:2013-08-06 21:55:39
【问题描述】:

我正在使用后面的代码以编程方式使用一些控件填充 ascx 面板控件,但我无法弄清楚为什么“SelectedValue”属性未设置为我所期望的。

我有这个代码:

int i = 0;
{
    var row = new Panel {ID = string.Format("row_{0}", i)};
    var ddl = new DropDownList();
    ddl.Items.AddRange(_templateDdl.Items.OfType<ListItem>().ToArray());
    ddl.SelectedValue = "21246";
    ddl.ID = string.Format("ddl_{0}", i);

    row.Controls.Add(ddl);
    Rows.Controls.Add(row);
}
i = 1;
{
    var row = new Panel {ID = string.Format("row_{0}", i)};
    var ddl = new DropDownList();
    ddl.Items.AddRange(_templateDdl.Items.OfType<ListItem>().ToArray());
    ddl.SelectedValue = "21240";
    ddl.ID = string.Format("ddl_{0}", i);

    row.Controls.Add(ddl);
    Rows.Controls.Add(row);
}

问题是即使 ID 设置正确,第一个的 SelectedValue 始终与最后一个相同。

有什么方法可以监视控件,并在值被其他代码更改的情况下使 Visual Studio 中断?

欢迎任何其他建议:)

应该提到这是在 Umbraco 解决方案中完成的,以防它意味着什么。

谢谢

【问题讨论】:

  • 当您查看 DDL 的属性时,它是否有默认值?
  • 代码正在创建 DDL。当我在调试中单步执行时,我可以验证 SelectedValue 是否设置正确。在添加 ddl 后,它的行为就好像其他东西正在改变它一样。
  • 看起来,尽管 SelectedValue 属性集属于 DDL,但它实际上是在 ListItem 上设置的,在这种情况下,它是从模板 ddl 复制的,因此是对相同的引用数组。

标签: c# visual-studio drop-down-menu umbraco selectedvalue


【解决方案1】:

看起来尽管 SelectedValue 属性集属于 DDL,但它实际上是在 ListItem 上设置的,在这种情况下,它是从模板 ddl 复制的,因此是对同一数组的引用。

我写了这段代码作为解决方案:

// Pass the template DDL to this function which will create a new separate List:
private List<ListItem> GetListItems(DropDownList ddl)
{
    return (from ListItem srcItem in ddl.Items select new ListItem(srcItem.Text, srcItem.Value)).ToList();
}

// Retrieve the items from the List and assign them to the DropDownList:
ddl1.Items.AddRange(GetListItems(_templateDdl).ToArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多