我正在使用 asp.net 并HtmlSelect
在我的页面上有一个元素(带有runat="server"
)。通常我只会将 设置DataSource
为一些加载的数据和DataBind
. 但是在这种情况下,数据具有一个层次结构,我想在 HTML 中用optgroup
. 谷歌没有带来任何喜悦——这甚至可能吗?
问问题
2316 次
2 回答
1
我有一个类似的问题要解决,我就是这样做的。在我继续之前,我确实找到了各种列表的重新压裂方法,这些方法可能确实有效。但是,我认为这不是解决问题的最佳途径。这是我所做的:
我还需要知道用户在下拉列表中选择了哪个选项,但发现您无法在 ASP.net 中使用选项组构建下拉列表。所以要做到这一点,我只是在每个组中构建了一个简单<select>
的<optgroup>
's 和's。<option>
然后我放置了一个<div>
带有隐藏文本框的runat="server"
集合。我"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....
}
于 2011-06-17T14:10:55.097 回答
0
我一直在寻找同样的东西,它看起来不像 ASP 本身支持这个。一次 Google 搜索发现有人在http://www.codeplex.com/SharpPieces推荐了一个库,但我从未使用过它,也不知道它有多好。其他人谈论编写自己的渲染器以支持 optgroup。
于 2011-06-13T23:31:22.913 回答