C# asp:dropDownList选择值而不是键

C# asp:dropDownList选择值而不是键,c#,asp.net,C#,Asp.net,我正在将数据绑定到asp:DropDownList中,如下所示: MyDDL.DataSource = DAL.GetKeyValuePairs(); MyDDL.DataTextField = "Key"; MyDDL.DataValueField = "Value"; MyDDL.DataBind(); 在我的html中,我得到了如下定义的列表: <asp:DropDownList runat="server" ID="MyDDL" ClientIDMode=

我正在将数据绑定到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" />
与键关联的值包括:

Key1 - value1
Key2 - value2
Key3 - value3
Key4 - value3 (notice this last value is the same as for key3)
因此,当我从下拉列表中选择Key4时,它实际上为我选择了Key3

为什么会发生这种情况?这是代码的另一部分造成的还是DropDownList的工作原理?!当我拉入.DataSource时,我的数据被正确返回。我可以看到正确的键/值对,只是不允许我在前端选择某些键

DataTextField属性指定显示列表项文本的源

DataValueField属性指定列表项将从中检索每个元素的值的源。该值是每个项的唯一键

因此,尽管有点混乱,但我认为与KeyValuePair类的映射可能与您正在进行的映射相反,请尝试:

MyDDL.DataTextField = "Value";
MyDDL.DataValueField = "Key";

让列表中的每个项目都有一个唯一的id不是更容易吗?如果从下拉列表中选择,为什么会有两个值相同的项目?也许您应该考虑将同一值的多个条目合并到单个条目中?DataTextField属性包含任意文本值,因此无法可靠地用于匹配。另一方面,DataValueField属性应该代表您的选择。问题不清楚,请给出给定数据的示例,以及您的期望值。@Isma,我相信他们会的,这不是键的用途吗?@JuanR下拉列表应该都是唯一的,它们显示的都是唯一的,但是不同的键应该有相同的值。是的,我认为写它的人做出了这个假设,然后在它的基础上在页面的其他区域显示东西。这将需要一些重构,但通过在这个级别上交换,我认为它会起作用。很高兴它被解决了,如果你想使用这个值作为键,你也可以,但你需要做出选择并丢弃重复项,这在这种情况下似乎不正确。我认为他们的关键是价值,价值是关键-这并没有完全起作用,因为显示需要来自dictionary对象的键。如果我交换它,则会显示该值,并且该值是超长的。我最终将字典存储在一个私有字段中,将MyDDL.DataTextField和MyDDL.DataValueField都设置为Key,然后从源代码中提取值以显示在必要的显示区域中。是的,从你的问题中不可能知道,但实际上问题似乎与DataTextField和DataValueField有关。
MyDDL.DataTextField = "Value";
MyDDL.DataValueField = "Key";