asp.net помощник для DropDownList не будет отображаться правильно - PullRequest
1 голос
/ 02 августа 2011

Я пытаюсь получить выпадающий список, чтобы выбрать правильное значение при загрузке страницы.

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value"), new { @class = "selectbox", selected = Model.CounterpartyType }) 

Однако, когда страница отображается, она всегда выбирает первое значение в раскрывающемся списке.

Screenshot of the page

Источник HTML для страницы:

    <select class="selectbox" id="CounterpartyTypeSelect" name="CounterpartyTypeSelect" selected="977980f2-ebb2-4c2a-92c2-4ecdc89b248d">
        <option value="5802239e-c601-4f1e-9067-26321213f6e6">Societa per Azioni (SpA)</option>
        <option value="f8160341-4a69-436f-9882-4da31a78f1d5">Gesellschaft mit beshrankter Haftung (GmbH)</option>
        <option value="977980f2-ebb2-4c2a-92c2-4ecdc89b248d">Sociedad Anonima (SA)</option>
        <option value="cdbeb1d3-301b-4884-b65a-612ddd8306f3">Private Limited Company (Ltd)</option>
        <option value="1fe68d96-f31b-4859-9869-8c76a5eb1508">Corporation (Inc)</option>
        <option value="9c9e5722-ab59-4d1c-a0a3-91b42a3ee721">Limitada (LTDA)</option>
        <option value="0cb57339-8705-4e3a-8f6a-95e9664962b7">Public Limited Company (Plc)</option>
        <option value="0924d6f1-06a9-49a3-ac05-b3e2686a0e92">Partnership</option>
        <option value="c8fbe021-a8f7-4e9d-ab38-dbeb5af5a631">Limited Liability Company (LLC)</option>
        <option value="30d9e22b-34f5-43c5-8471-e614dbedb6a6">Aktiengesellschaft(AG)</option>
    </select> 

Как вы можете видеть, он помещает атрибут «selected» во внешний тег select вместо опции, соответствующей Id. У меня есть другой выбор с идентичными параметрами (кроме имен переменных, конечно), и он правильно отображает таким образом. Я не хочу использовать DropDownListFor<T>, потому что у меня есть поле HiddenFor, которое фактически отправляет это значение в форме, и javascript, который устанавливает значение в соответствии с выбором Select. Я подтвердил, что моя база данных хранит значения, которые я установил правильно. Что здесь происходит?

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

SelectList() имеет перегрузку для выбора выбранного элемента. Вы добавляете его в качестве атрибута HTML в помощнике, и они отображаются в родительском теге выбора.

Сделайте это:

@Html.DropDownList("CounterpartyTypeSelect", new SelectList(ViewBag.CounterpartyTypeOptions, "DefaultId", "Value", Model.CounterpartyType), new { @class = "selectbox" })

Используйте перегрузку для SelectList, которая принимает четыре аргумента:

new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue);
0 голосов
/ 02 августа 2011

Что происходит в первой строке вашего кода new { @class = "selectbox", selected = Model.CounterpartyType }, вы предоставляете выбранный атрибут в качестве атрибута HTML родительского элемента select .

Итак, вы видите selected = "977980f2-ebb2-4c2a-92c2-4ecdc89b248d ", появляющееся в первой строке вывода, что, кстати, ничего не делает.

Также вы предоставляете значение для поиска в Помощнике в виде жестко запрограммированной строки «значение» вместо фактического значения, которое вам нужно из модели. Браузер по умолчанию выберет первый вариант, поскольку он не может найти любое значение, совпадающее со значением. Чтобы исправить это, укажите Model.CounterpartyType в качестве третьего параметра для вашего SelectList параметра вместо 'value'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...