0

我在数据库中有一个可以为 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.) 我想添加一个“未选择 ID”作为默认值,并将存储为 NULL。我可以通过将其添加到 HTML.DropDownList (..., "No ID Selected") 来获得列表中的默认值,但是当我这样做时,即使记录有,所选值始终是默认值一个有效的代码。

我也可以将它添加到我的 XML 列表中,但是 NULL 值与 XML 记录不匹配:

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

此外,如果我查看具有有效 ID 的记录,然后拉出一个为 NULL 的记录,则下拉菜单将保持选择旧的有效 ID。

(2.) 即使添加默认值,如果数据库中有有效代码,我仍然希望下拉列表获取所选值集。

我在这里查看了其他一些帖子,虽然这似乎很常见,但我无法从发布的任何解决方案中得出正面或反面。如果我添加默认值,我不会得到一个选定的值集。如果我修复设置所选值,NULL 值不会设置为默认值,而是将最后选择的 DealerId 值保留在下拉列表中。

4

1 回答 1

0

通过使用 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>
于 2013-06-14T20:02:37.557 回答