C# DropDownList的SelectedValue设置不正确
我正在使用一些来自代码隐藏的控件以编程方式填充ascx面板控件,但我无法理解为什么“SelectedValue”属性没有设置为我期望的值 我有以下代码:C# DropDownList的SelectedValue设置不正确,c#,visual-studio,drop-down-menu,umbraco,selectedvalue,C#,Visual Studio,Drop Down Menu,Umbraco,Selectedvalue,我正在使用一些来自代码隐藏的控件以编程方式填充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>()
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);
}
inti=0;
{
var row=newpanel{ID=string.Format(“row{0}”,i)};
var ddl=新的DropDownList();
ddl.Items.AddRange(_templatedddl.Items.OfType().ToArray());
ddl.SelectedValue=“21246”;
ddl.ID=string.Format(“ddl{0}”,i);
行.控件.添加(ddl);
Rows.Controls.Add(行);
}
i=1;
{
var row=newpanel{ID=string.Format(“row{0}”,i)};
var ddl=新的DropDownList();
ddl.Items.AddRange(_templatedddl.Items.OfType().ToArray());
ddl.SelectedValue=“21240”;
ddl.ID=string.Format(“ddl{0}”,i);
行.控件.添加(ddl);
Rows.Controls.Add(行);
}
问题在于,即使ID设置正确,第一个ID的SelectedValue始终与最后一个ID的SelectedValue相同
是否有任何方法可以监视控件,并使Visual Studio中断,以防值被其他代码更改
欢迎提出任何其他建议:)
可能应该提到,这是在翁布拉科解决方案中完成的,以防有任何意义
感谢尽管SelectedValue属性集属于DDL,但它实际上是在ListItem上设置的,在本例中,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());
//将模板DDL传递给此函数,该函数将创建一个新的单独列表:
私有列表GetListItems(DropDownList ddl)
{
返回(从ddl.Items中的ListItem srcItem选择新ListItem(srcItem.Text,srcItem.Value)).ToList();
}
//从列表中检索项目并将其分配到DropDownList:
ddl1.Items.AddRange(GetListItems(_templatedddl.ToArray());
查看DDL的属性时,是否有默认值?DDL是由代码创建的。在调试中单步执行时,我可以验证SelectedValue是否设置正确。在添加ddl后,它的行为就好像其他东西在更改ddl一样。看起来,即使SelectedValue属性集属于ddl,但它实际上是在ListItem上设置的,在本例中,ListItem是从模板ddl复制的,因此是对同一数组的引用。