Использование привязки данных для заполнения HtmlSelect элементами optgroup в asp.net - PullRequest
2 голосов
/ 14 января 2011

Я использую asp.net и на моей странице есть элемент HtmlSelectrunat="server").Обычно я просто устанавливаю DataSource для некоторых загруженных данных и DataBind.Однако в этом случае данные имеют один уровень иерархии, и я хочу представить это в HTML с помощью optgroup.Google не придумала никакой радости - это вообще возможно?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

У меня была похожая проблема, и я так и решил. Прежде чем продолжить, я нашел все виды методов повторного разбиения для списков, которые, вероятно, работают. Однако я не думаю, что это лучший путь для моего решения. Вот что я сделал:

Мне также нужно было узнать, какой вариант пользователь выбрал в раскрывающемся списке, но обнаружил, что нельзя создать раскрывающийся список с группами параметров в ASP.net. Поэтому для этого я просто создал простые <select> с <optgroup> и <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....
}
0 голосов
/ 14 июня 2011

Я искал то же самое, и не похоже, что ASP поддерживает это изначально. В результате одного поиска в Google кто-то порекомендовал библиотеку по номеру http://www.codeplex.com/SharpPieces,, но я никогда не использовал ее и не знаю, насколько она хороша. Другие люди говорят о написании собственного рендерера для поддержки optgroup.

...