ASP.NET SelectedIndex属性在页面上的所有HtmlSelect中都是相同的

时间:2010-07-09 09:18:57

标签: asp.net htmlcontrols

我有一些HtmlSelect(a'la asp.net的DropDownList),其ID类似于Select1,Select2,...,Select13。我创建静态项目列表:

for (int i = 0; i < tab.Length; i++)
  _listItems[i] = (new ListItem { Text = tab[0, i], Value = tab[1, i], Selected=false });

然后我为每个HtmlSelect控件&amp;分配该列表。分配一个新的SelectedIndex属性:

var HtmlSelectControl = ((HtmlSelect)this.FindControl(String.Format("Select{0}", controlNumber)));

HtmlSelectControl.Items.AddRange(_listItems);
HtmlSelectControl.SelectedIndex = controlNumber - 1;

问题是,当我设置Select2控件的SelectedIndex属性(例如= 1)时,Select1控件具有相同的SelectedIndex属性(其索引= 0)。为什么?

1 个答案:

答案 0 :(得分:0)

您将所有选择控件绑定到同一个项目列表。当您在选择控件上设置SelectedIndex时,它是您正在选择的项目。由于所有选择控件都引用了相同的项列表,因此在其中一个上设置SelectedIndex属性会将其设置为所有其他项。

比较以下两个片段。第一个与你绑定到同一个列表的那个相同:

        var _listItems = new List<ListItem>{ new ListItem("Item1"), new ListItem("Item2"), new ListItem("Item3")};
        for (int controlNumber = 1; controlNumber < 4; controlNumber++) {
            var HtmlSelectControl = ((HtmlSelect) this.FindControl(String.Format("Select{0}", controlNumber)));
            HtmlSelectControl.Items.AddRange(_listItems.ToArray());
            HtmlSelectControl.SelectedIndex = controlNumber - 1;
        }

第二个是为每个下拉列表创建单独列表的位置。这是你需要做的:

        for (int controlNumber = 1; controlNumber < 4; controlNumber++) {
            var _listItems = new List<ListItem>{ new ListItem("Item1"), new ListItem("Item2"), new ListItem("Item3")};
            var HtmlSelectControl = ((HtmlSelect) this.FindControl(String.Format("Select{0}", controlNumber)));
            HtmlSelectControl.Items.AddRange(_listItems.ToArray());
            HtmlSelectControl.SelectedIndex = controlNumber - 1;
        }