如何在下拉列表的列表项中强制换行?

时间:2010-02-01 17:07:21

标签: c# asp.net drop-down-menu line-breaks listitem

我有一个已经手动数据绑定的下拉列表。我目前获取数据,遍历每个项目,并根据项目中的值,更改单个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);
        }

我正试图强制listitem中的文本在某些点上中断。我从数据源检索的字符串当前在任何应该有换行符的地方都有一个“\ r \ n”。这适用于在普通文本框中显示,但它不适用于listitem。 我尝试用"<br>"替换“\ r \ n”,但是当我这样做时,它只会在listem中显示<br>以及文本的其余部分。我尝试使用width属性将listitem内容包装在"div"中,但它也只是在ListItem文本中显示"div"标记。 我还尝试将以下内容添加到bind:

的ListItem属性中
                li.Attributes.Add("width", "100px");

但这并没有导致任何改变。

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

2 个答案:

答案 0 :(得分: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元素更灵活。

答案 1 :(得分:2)

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