我在数据库中有一个可以为 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 值保留在下拉列表中。