使用数据绑定在asp.net中使用optgroup元素填充HtmlSelect

时间:2011-01-14 12:04:25

标签: c# asp.net optgroup

我使用的是asp.net,页面上有一个HtmlSelect元素(runat="server")。通常我只会将DataSource设置为某些已加载的数据和DataBind。但是,在这种情况下,数据具有一个层次结构,我想在HTML中用optgroup表示这一点。谷歌没有提出任何喜悦 - 这甚至可能吗?

2 个答案:

答案 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支持。