多个ASP.NET DropDownLists被设置为相同的值

时间:2011-11-07 21:25:58

标签: asp.net drop-down-menu

我有6个下拉列表(具有相同的选项),我在我的代码隐藏中手动设置它们。所有六个都应该有不同的值。当我记录我将它们设置为的值时,我得到要设置的正确假设值。但是,当页面呈现时,它们中的所有六个都被设置为相同的怪异值。

我尝试使用以下所有方法设置值:

// set index, find by text

dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByText(val1));

// set with selected value

dd2.SelectedValue = val2;

// set index, find by value

dd3.SelectedIndex = dd3.Items.IndexOf(dd3.Items.FindByValue(val3));

// set list item, selected = true

((ListItem)dd4.Items.FindByValue(val4)).Selected = true;

下拉列表的选项集在我尝试设置之前生成:

foreach (Station st in stations) {
ListItem li = new ListItem() { Text = st.fromto, Value = st.fromto};
dd1.Items.Add(li); 
dd2.Items.Add(li); 
dd3.Items.Add(li); 
dd4.Items.Add(li); 
dd5.Items.Add(li); 
dd6.Items.Add(li); 
}

然后我在数据库中查看我的应用中是否存在特定参考ID的任何值。如果是这样,则表示我需要设置一个或多个(最多6个)下拉列表:

var existingStations = db.LOGOPS_STATIONs.Where(x => x.XREF_LOGOP_MAIN_ID == logopRefId);
    if (existingStations.Count() > 0) {
        int i = 1;
        foreach (LOGOPS_STATION s in existingStations) {
            if (i < 7) {
                string text= s.FROM_STATION;

                    if (i == 1) dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByText(text));
                     // for the heck of it, set the next one manually...                            
                     else if (i == 2) dd2.SelectedIndex = 2;
                             // try and set one with forcing select
                     else if (i == 3) ((ListItem)dd3.Items.FindByText(text)).Selected = true;
                             // good ol normal
                     else if (i == 4) dd4.SelectedValue = text;
                    ... and so on ...

            }
        }
    }

因此,下拉列表全部填充(当我登录代码后面时,它们已经完全填充)。当我在设置它们时记录实际值时,它们会按预期设置为值。但是,当页面加载时,它们都被设置为相同的东西

无论如何,不​​知道还能做什么。我打开和关闭了不同的事件验证连接。我已经禁用所有JS以查看是否正在操纵值,而事实并非如此。我试过明确设置像这样

dd1.SelectedIndex = 2;

dd2.SelectedIndex = 8;

奇怪的是,这也不起作用。对于实际,何时将SelectedIndex设置为具有唯一ID的唯一控件未设置项目?

1 个答案:

答案 0 :(得分:2)

我必须为每个下拉列表创建一个单独的列表项,而不是在foreach循环中共享相同的li。然后再进一步,必须在ListItem的构造函数中设置Selected = false

我假设您可以为每个下拉群体实例“重用”代码,但每个下拉列表都需要它自己唯一的ListItem

也许有更好的方法,但这个解决方案似乎已经解决了问题