我正在以编程方式从代码中填充一些ascx Panel控件,但是我无法弄清楚为什么'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解决方案中完成的,万一它意味着什么。
由于
答案 0 :(得分: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());