具有非唯一值的下拉列表

时间:2015-10-21 01:22:43

标签: c# asp.net

我在代码中填充了一个下拉列表,如果从下拉菜单中选择了 cell.setOnMouseEntered(e -> showPopup(cell)); cell.setOnMouseExited(e -> hidePopup()); ,列表会显示的所有内容,显示的文字为Pink Water Buffalo我错误地设置了什么吗?这是完整的语法(我没有为下拉列表选择索引更改事件,可能导致错误)

Yellow Snake


修改

这是我用来创建下拉列表的asp

protected void Page_Load(object sender, EventArgs e)
{
    IP = HttpContext.Current.Request.Params["HTTP_CLIENT_IP"] ?? HttpContext.Current.Request.UserHostAddress;
    if (!IsPostBack)
    {
      message.Visible = false;
      populateDDL();
    }
}

protected void populateDDL()
{
    var item = new List<ListItem>
    {
       new ListItem("", ""),
       new ListItem("Yellow Snake", "9"),,
       new ListItem("This item works", "12"),
       new ListItem("Pink Water Buffalo", "9"),
    };
    this.dropdownlistone.DataTextField = "Text";
    this.dropdownlistone.DataValueField = "Value";
    this.dropdownlistone.DataSource = item;
    this.dropdownlistone.DataBind();
}


编辑#2
如果你有多个下拉列表,它很丑陋,语法很多,但对我来说这并不是什么大问题。我所做的是添加了一个.0,.1等,并为下拉列表中的每个项目递增。然后使用<asp:DropDownList ID="dropdownlistone" runat="server" Height="20px" Width="278px" AutoPostBack="true"> </asp:DropDownList> 方法仅删除相关的部分:

.Split

2 个答案:

答案 0 :(得分:1)

在你的例子中,&#34;黄色蛇的价值&#34;和&#34; Pink Water Buffalo&#34;都被设置为9.&#34;黄蛇&#34;列表中排在第一位,这就是你得到的那个。

答案 1 :(得分:0)

您必须找到一种方法,使每个项目的值都是唯一的。否则,您可能会在不同的浏览器中获得意外结果。我使用的方法是将文本和值与管道(|):

组合在一起
var item = new List<ListItem>
{
   new ListItem("", ""),
   new ListItem("Yellow Snake", "9|Yellow Snake"),
   new ListItem("This item works", "12|This item works"),
   new ListItem("Pink Water Buffalo", "9|Pink Water Buffalo"),
};

然后你可以通过拆分来轻松获得价值:

string value = dropdownlistone.SelectedValue.Split('|')[0];

我更喜欢管道,因为它几乎没有用作显示值。如果文本中包含点,则使用点可能会遇到一些问题,例如“黄色蛇很棒,但绿色很好。”