0

我有一个已经手动数据绑定的下拉列表。我目前获取数据,遍历每个项目,并根据项目中的值更改单个 ListItem 的 css。

例如:

foreach (Site mySite in myList)
        {
            ListItem li = new ListItem(mySite.FullAddress, mySite.Id.ToString());
            if (mySite.DisabledFlg)
            {
                li.Attributes.Add("style", "color:#999");
            }
            this.Items.Add(li);
        }

我试图强制列表项中的文本在某些点中断。我从数据源中检索的字符串当前在应该有换行符的任何地方都有一个“\r\n”。这适用于在普通文本框中显示,但不适用于列表项。我尝试用 a 替换“\r\n”,"<br>"但是当我这样做时,它只会<br>与其余文本一起显示在列表中。我尝试将 listitem 内容包装在"div"具有宽度属性的 a 中,但它也只是"div"在 ListItem 文本中按字面意思显示标签。我还尝试在绑定时将以下内容添加到 ListItem 属性中:

                li.Attributes.Add("width", "100px");

但这也没有带来任何改变。

我见过自定义下拉列表控件,其中包含多行列表项。我如何获得相同的结果?

4

2 回答 2

3

我不认为这是可能的。DropDownList 控件呈现一个<select>元素,它的设计并不是为了让其子<option>元素具有换行符。

然而,实现相同效果的另一种方法是在将数据绑定到 DropDownList 之前对其进行处理。您可以拆分换行符并将相同的 DataValue 分配给那些重复的项目。您最终会得到如下 HTML:

<select>
    <option value="A">A</option>
    <option value="A">A.2</option>
    <option value="B">B</option>
</select>

您可能还可以找到一些花哨的 Javascript 控件或插件,它们可以模拟下拉控件,但比普通select元素更灵活。

于 2010-02-01T17:13:32.557 回答
2

我认为你必须添加换行符作为它自己的列表项。然后,您可以执行一些 Javascript 和/或验证以防止用户选择该“项目”。

于 2010-02-01T17:13:41.417 回答