我有以下類:MVC4 Html.DropDownListFor不選擇指定值
public class PreviewImage_Edit
{
...
public List<GridDetail_Edit> GridDetails { get; set; }
public SelectList GridDetailTypesList { get; set; }
...
}
public class GridDetail_Edit
{
...
public int GridDetailTypeId { get; set; }
...
}
而且,我有一個期望類型PreviewImage_Edit的模型,其具有下面的代碼塊的局部視圖:
@model PreviewImage_Edit
...
@if (Model.GridDetails != null)
{
for (var i = 0; i < Model.GridDetails.Count(); i++)
{
...
@Html.DropDownListFor(model => model.GridDetails[i].GridDetailTypeId, Model.GridDetailTypesList)
...
}
}
我正在GridDetail_Edit中正確創建SelectList,並且按照預期填充下拉列表。下面是針對第一GridDetails生成的標記對象:
<select data-val="true" data-val-number="The field GridDetailTypeId must be a number." data-val-required="The GridDetailTypeId field is required." id="GridDetails_0__GridDetailTypeId" name="GridDetails[0].GridDetailTypeId">
<option value="1">Top</option>
<option value="2">Bottom</option>
</select>
我已驗證所選的選項正確保存在數據庫中(即使在選擇的選項不在第一/默認選項當點擊保存按鈕時,可以選擇下拉菜單。但是,當我重新編輯時,選定的選項仍然是下拉菜單中的第一個選項。
我翻遍了代碼並驗證了數據是從數據庫中正確檢索的。我甚至已經將Html.DropDownListFor轉換爲Html.EditorFor,並確認存儲在數據庫中的值正在按照預期使其進入視圖。
我用過Html.DropDownListFor當與它關聯的屬性是一個整數值,但從來沒有它是一個整數值,它是對象集合的一部分。我會對目前爲止所做的工作感到擔憂,但似乎一切都與這一關鍵問題有關。
到目前爲止,我已經嘗試將PreviewImage_Edit中的SelectList移動到GridDetail_Edit中,並分別初始化它們,在那裏我以編程方式爲適當的SelectedListItem設置了「Selected」值。這不起作用...相同的結果。
有沒有人遇到過這個問題?有關解決此問題的最佳方法的任何建議?
更新
下面的代碼填充GridDetailTypesList
var gridDetailTypes = _db.GridDetailTypes.OrderBy(g => g.DisplayOrder).ToList();
return new SelectList(gridDetailTypes, "GridDetailTypeId", "Name");
這是非常簡單的代碼片段。 SelectList構造函數的第二個參數表示值應該在「value」屬性中使用的字段。我不認爲這個問題與值域是一個整數有關,因爲我在同一頁上有類似的代碼,並且下拉功能正常。唯一的區別是我的「問題」下拉列表在我的ViewModel的集合中。
你可以添加代碼段插入項目到GridDetailsTypeList的位置嗎?它可能與此有關(GridDetailTypeId的值是一個int,而SelectListItems的值是字符串) – jingtao