2013-05-17 39 views
0

我在DB中有一個值可以爲NULL,並導致我與Html.DropDownList有問題。該代碼存儲在數據庫中,並且當前正確設置了所選值。HTML.DropDownList默認值保存爲NULL,並仍然在選定的值上工作

<%= 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.)我想添加一個「No ID Selected」,這是默認值e並將存儲爲NULL。我可以通過將它添加到HTML.DropDownList(...,「No ID Selected」)來獲得默認值,但是當我這樣做時,選定的值始終是默認值,即使記錄有一個有效的代碼。

我還可以把它添加到我的XML名單,但隨後的NULL值不與XML記錄匹配:

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

另外,如果我查看與有效身份證件的記錄,然後拉起一個是NULL,下拉選擇保持選擇舊的有效ID。

(2.)即使添加默認值,我仍然希望下拉列表在數據庫中存在有效代碼時獲取所選值。

我已經看過這裏的一些其他帖子,雖然這似乎很常見,但我無法使任何發佈的解決方案正面或反面。如果我添加默認值,我沒有得到任何選定的值。如果我修復設置選定的值,則不會將NULL值設置爲默認值,但會將最後選擇的DealerId值保留在下拉列表中。

+0

我做了一些下面的測試,發現這並不是錯誤......那麼這個第一個參數是什麼呢?我認爲這是設置選定值的對象? '<%= Html.DropDownList(「SomethingThatDoesntExist」,new List (((List

回答

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>