HTML.DropDownList Значение по умолчанию сохранить как NULL и по-прежнему работать с выбранными значениями

У меня есть значение в БД, которое может быть NULL и вызывает у меня проблемы с Html.DropDownList. Код хранится в базе данных и в настоящее время правильно устанавливает выбранное значение.

<%= Html.DropDownList("dealerIds"
                                , new List<SelectListItem>(((List<Company.SPPC.MVC.DealerId>)ViewData["dealerIds"]).Select(i => new SelectListItem() { Value = i.Key, Text = i.Description }).ToList())
                                , new { tabloop = "", id = "ddlDealerIds" })%>

В контроллере я беру значения из файла XML и добавляю их в ViewData:

Dim dealerIdXmlFile As String = ConfigurationManager.AppSettings("DealerIdXmlFile").ToString()
        Using reader As System.IO.FileStream = System.IO.File.OpenRead(dealerIdXmlFile)
            Dim xmlSerializer As New System.Xml.Serialization.XmlSerializer(GetType(DealerIdModel))
            Dim dealerIdList As DealerIdModel = xmlSerializer.Deserialize(reader)
            Dim dealerIds As New List(Of DealerId)
            For Each x As DealerId In dealerIdList
                dealerIds.Add(x)
            Next
            ViewData("dealerIds") = dealerIds
        End Using

Кроме того, привязка явно задается в представлении:

$("#ddlDealerIds").attr("data-bind", "value: DealerId");

Выпуск состоит из двух частей:

(1.) Я хочу добавить «Идентификатор не выбран», который является значением по умолчанию и будет сохраняться как NULL. Мне удалось получить значение по умолчанию в списке, добавив его в HTML.DropDownList (..., «Идентификатор не выбран»), но когда я это сделаю, выбранное значение всегда будет значением по умолчанию, даже если в записи есть действующий код.

Я мог бы также добавить его в свой список XML, но тогда значение NULL не соответствует записи XML:

DealerId key = "" Desc="No ID Selected" ....

Кроме того, если я просматриваю запись с действительным идентификатором, а затем выбираю тот, который имеет значение NULL, раскрывающийся список остается выбранным для старого действительного идентификатора.

(2.) Даже если добавить значение по умолчанию, я все равно хочу, чтобы в раскрывающемся списке отображалось выбранное значение, если в базе данных есть допустимый код.

Я просмотрел несколько других сообщений здесь, и хотя это кажется обычным явлением, я не могу понять ни одно из опубликованных решений. Если я добавлю значение по умолчанию, я никогда не получу выбранное значение. Если я исправлюсь, чтобы установить выбранное значение, значения NULL не будут установлены по умолчанию, но сохранят последнее выбранное значение DealerId в раскрывающемся списке.


person Jon Spencer    schedule 17.05.2013    source источник
comment
Я провел следующее тестирование и обнаружил, что это не ошибка ... так что же это за первый аргумент? Я думал, это объект, который установил выбранное значение? <%= Html.DropDownList("SomethingThatDoesntExist", new List<SelectListItem>(((List<Company.SPPC.....   -  person Jon Spencer    schedule 21.05.2013


Ответы (1)


Заставил его работать, воспользовавшись HTMLHelpers и Knockout.JS. Установите параметры и все работает.

<div class="editor-field"><select id="ddlDealerIds" data-bind="options: dealerIdsList, optionsText: 'Description', optionsValue: 'Key', optionsCaption: '*** No Id Selected ***', value: DealerId"></select></div>
person Jon Spencer    schedule 14.06.2013