我有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的唯一控件未设置项目?
答案 0 :(得分:2)
我必须为每个下拉列表创建一个单独的列表项,而不是在foreach循环中共享相同的li。然后再进一步,必须在ListItem的构造函数中设置Selected = false
我假设您可以为每个下拉群体实例“重用”代码,但每个下拉列表都需要它自己唯一的ListItem
也许有更好的方法,但这个解决方案似乎已经解决了问题