Asp.net-Mvc

ASP.NET MVC DropDownListFor 不支持 SelectListItem.Selected

  • July 1, 2014

我正在使用DropDownListFor在視圖中呈現下拉列表。不知何故,呈現的列表沒有選擇SelectListItemwith Selectedset to true

在控制器動作中:

var selectList = sortedEntries.Select(entry => new SelectListItem
                           {
                               Selected = entry.Value.Equals(selectedValue),
                               Text = entry.Value,
                               Value = entry.Id
                           });

return View(new DropDownListModel
           {
               ListId = id,
               SelectList = selectList,
               OptionLabel = "Click to Select"
           });

在視圖中:

<%= Html.DropDownListFor(m => m.ListId, 
   Model.SelectList, 
   Model.OptionLabel, 
   new {@class="someClass"}) %>

我嘗試了以下方法:

  1. 確保只有一項Selected設置為true
  2. 刪除選項標籤參數。
  3. 刪除 HTML 屬性對象。
  4. 用於:SelectList_DropDownListFor

  Html.DropDownListFor(m => m.ListId, 
       new SelectList(Model.SelectList, "Value", "Text", 
            new List<SelectListItem>(Model.SelectList).Find(s => s.Selected)), 
       new {@class="someClass"})

關於出了什麼問題的任何建議?

編輯

更多資訊:

  • 這個動作是一個子動作,由另一個視圖呼叫HTML.RenderAction

DropDownListFor 將始終選擇列錶框的值,因此在這種情況下,它將查看 ListId 的值並選擇列表中的該項目。如果列表中未找到 ListId,則將選擇第一項(或預設文本)。如果您想要一個基於所選屬性進行選擇的列表,請使用 DropDownList(沒有 For,在這種情況下您必須自己命名)。

因此,在您的情況下,這將起作用:

var selectList = sortedEntries.Select(entry => new SelectListItem
{
   Text = entry.Value,
   Value = entry.Id
});

return View(new DropDownListModel
{
   ListId = selectedValue,
   SelectList = selectList,
   OptionLabel = "Click to Select"
});

我在同一個模型上遇到了同樣的問題(決定中的其他模型沒問題)

不工作:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.Value, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })

完美執行,選擇的元素:

@Html.DropDownListFor(o => o.Drivers.ValueListItems.ToDictionary(u=>u.Value).Values, Model.Drivers.ValueListItems, new { size = Model.Drivers.ValueSizeList, Multiple = "multiple" })

引用自:https://stackoverflow.com/questions/6689505