隐藏或删除下拉列表中的重复选项

Posted

技术标签:

【中文标题】隐藏或删除下拉列表中的重复选项【英文标题】:Hide or Remove duplicate options in dropdownlist 【发布时间】:2019-01-02 15:15:53 【问题描述】:

我正在使用WebForms。在我的表单中,我有一个 dropdownlist 控件。有时Select 选项会在我的 from 中添加两次。如何删除此重复选项或隐藏它?

我尝试计算添加了多少次Select 选项然后隐藏它但没有成功。

之所以添加两次是因为grdview_Color_DataBound 被调用了两次。

    <select name="ctl00$MainContent$grdview_Color$ctl10$ddl_Grd_Color" id="MainContent_grd_ddl_grdview_Color" class="form-control dropdown">
       <option value="0" selected="selected" disabled="disabled">Select</option>
       <option value="0" disabled="disabled">Select</option>
       <option value="Yellow">Yellow</option>
       <option value="Red">Red</option>
       <option value="Blue">Blue</option>
       <option value="Green">Green</option>
    </select>


    protected void grdview_Color_DataBound(object sender, EventArgs e)
    
        ListItem firstItem = new ListItem("Select", "0");
        firstItem.Attributes.Add("disabled", "disabled");
        ddl.DataSource = dataSource;
        ddl.DataTextField = TextField;
        ddl.DataValueField = ValueField;
        ddl.DataBind();
        ddl.Items.Insert(0, firstItem);
    

【问题讨论】:

您正在尝试解决症状而不是问题。您应该弄清楚额外选项是如何进入列表的。 您需要显示您的标记以及您使用此代码的位置。 可能在数据绑定前清除ddl? 这不是原始标记 - 这是生成的标记。检查您使用的 aspx 或 ascx 文件。 我检查了 javascript 代码,发现有一段代码在附加 Select 选项并禁用它。谢谢你们的帮助:) 【参考方案1】:

一种天真的方法是将下拉列表中的项目存储在某种容器中,例如列表。清除下拉项目,然后循环遍历您的容器,仅将唯一项目添加回下拉项目列表,如下所示:

// Save the items
savedItems = dropDownItems.Items;

// Clear The items
dropDownItems.Items.Clear();

// Go through the container adding unique items to the drop down list
foreach (string item in savedItems)
    if (!dropDownItems.Items.Contains(item)) 
        dropDownItems.Items.Add(item);
    

这种方式当然不是最好的方式,但是如果你赶时间的话,这是一种方式。

【讨论】:

【参考方案2】:

您需要将AppendDataBoundItems 属性设置为true 以保留DDL 中的现有值。您还需要确保您没有在每次回发时都这样做 - 您的代码示例不会显示您是否以及如何在 Page_Load() 方法中执行此操作。

【讨论】:

我会调查 AppendDataBoundItems。谢谢

以上是关于隐藏或删除下拉列表中的重复选项的主要内容,如果未能解决你的问题,请参考以下文章

kendo 下拉列表在下拉列表中显示选项标签

如何使用 select2 插件隐藏下拉列表中的选项?

如何使用 jQuery 或 Javascript 从其他下拉列表中显示/隐藏相同的选项

表单下拉列表多行文本隐藏域

获取隐藏下拉列表禁用选定选项的值

从 Angular 的下拉列表中删除选定的选项