我将数据绑定到asp:DropDownList中,就像这样:
MyDDL.DataSource = DAL.GetKeyValuePairs();
MyDDL.DataTextField = "Key";
MyDDL.DataValueField = "Value";
MyDDL.DataBind();
在我的html中,我定义了这样的列表:
<asp:DropDownList
runat="server"
ID="MyDDL"
ClientIDMode="Static"
Visible="true"
OnSelectedIndexChanged="MyDDL_SelectedIndexChanged"
AutoPostBack="True"
ViewStateMode="Enabled"
EnableViewState="True" />
问题是,如果我从下拉列表中选择一个值与另一个值重复的键,则该下拉列表会自动选择具有该值的键的第一个实例,而不仅仅是选择键!
例如:
dropDownList显示
Key1
Key2
Key3
Key4
与键关联的值是:
Key1 - value1
Key2 - value2
Key3 - value3
Key4 - value3 (notice this last value is the same as for key3)
因此,当我从dropDownList中选择“ Key4”时,它实际上为我选择了Key3 。
为什么会这样?这是代码的另一部分负责吗,还是dropDownLists是如何工作的?当我拉入.DataSource
时,我的数据已正确返回。我可以看到正确的键/值对,只是不允许我在前端选择某些键?!
答案 0 :(得分:1)
DataTextField
属性指定了显示列表项文本的来源。
DataValueField
属性指定列表项将从中检索每个元素的值的源(该值是每个项的唯一键)。
因此,尽管有点令人困惑,但我认为与KeyValuePair
类的映射与您所做的相反,请尝试:
MyDDL.DataTextField = "Value";
MyDDL.DataValueField = "Key";