DB に NULL の可能性がある値があり、Html.DropDownList で問題が発生しています。コードはDBに保存され、現在選択された値を正しく設定しています。
<%= 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");
問題は 2 つの部分に分かれています。
(1.) デフォルト値である「ID が選択されていません」を追加し、NULL として保存します。HTML.DropDownList (..., "No ID Selected") に追加することでリストのデフォルト値を取得できましたが、これを行うと、レコードに有効なコード。
XML リストに追加することもできますが、NULL 値が XML レコードと一致しません。
DealerId key = "" Desc="No ID Selected" ....
また、有効な ID を持つレコードを表示し、NULL のレコードをプルアップすると、ドロップダウンは古い有効な ID に選択されたままになります。
(2.) デフォルト値を追加しても、DB に有効なコードがある場合は、ドロップダウンリストに選択した値セットを取得させたいと考えています。
ここで他のいくつかの投稿を見てきましたが、これは一般的であるように見えますが、投稿されたソリューションのいずれかから頭や尻尾を作ることはできません. デフォルト値を追加すると、選択した値セットが取得されません。選択した値を設定するように修正すると、NULL 値がデフォルトに設定されず、ドロップダウンで最後に選択された DealerId 値が保持されます。