我使用的是asp.net,页面上有一个HtmlSelect
元素(runat="server"
)。通常我只会将DataSource
设置为某些已加载的数据和DataBind
。但是,在这种情况下,数据具有一个层次结构,我想在HTML中用optgroup
表示这一点。谷歌没有提出任何喜悦 - 这甚至可能吗?
答案 0 :(得分:1)
我有一个类似的问题需要解决,这就是我的做法。在我继续之前,我确实为列表找到了各种重新压裂方法,这可能会起作用。但是,我认为这不是解决问题的最佳途径。这是我做的:
我还需要知道用户在下拉列表中选择了哪个选项,但发现您无法使用ASP.net中的选项组构建下拉列表。为此,我在每组中构建了一个简单的<select>
<optgroup>
和<option>
。然后我放置了一个隐藏文本框的<div>
,其中设置了runat="server"
。我在select上设置"onchange"
事件,将隐藏文本框的文本值更改为用户使用javascript选择的值。然后,当回发发生时,后面的代码可以通过隐藏文本框的runat="server"
访问用户选择的值。问题解决了!代码看起来像这样:
HTML(aspx)中的代码:
<div id="selectDiv">
<select id="selectItems" onchange="document.getElementById('hiddenselectDiv').getElementsByTagName('input')[0].value = this.options[this.selectedIndex].value;">
<optgroup label="Johannesburg">
<option value="Wilropark">Wilropark</option>
<option value="Bryanpark">Bryanpark</option>
<option value="Hurlingham">Hurlingham</option>
<option value="Midrand ">Midrand </option>
<option value="Glenvista">Glenvista</option>
<option value="Sunninghill">Sunninghill</option>
<option value="Edenvale ">Edenvale </option>
<option value="Parkhurst">Parkhurst</option>
</optgroup>
<optgroup label="Cape Town">
<option value="Tokai">Tokai</option>
<option value="Durbanville">Durbanville</option>
</optgroup>
<optgroup label="Durban">
<option value="Musgrave">Musgrave</option>
</optgroup>
<optgroup label="Pretoria">
<option value="Hatfield">Hatfield</option>
</optgroup>
</select>
</div>
<div id="hiddenSelectDiv">
<!--
Note: You probably want to set the hidden value to the first item you have seleced when you build the <select> object.
-->
<input type="hidden" id="selectedItem" value="Wilropark">
</div>
在背后的代码(C#)中:
if (!string.IsNullOrEmpty(selectedItem.Value))
{
//validation or whatever you want....
}
答案 1 :(得分:0)
我一直在寻找相同的东西,看起来ASP看起来不像本机支持。一个谷歌搜索发现某人在http://www.codeplex.com/SharpPieces推荐了一个图书馆,但我从未使用它,我不知道它有多好。其他人谈论编写自己的渲染器以获得optgroup支持。