1

我有一些带有 ID 的 HtmlSelect(a'la asp.net 的 DropDownList),例如 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 控件分配该列表并分配一个新的 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)。为什么 ?

4

1 回答 1

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;
        }
于 2010-07-09T10:18:00.077 回答