2014-10-28 36 views
1

我無法從數據庫中將所選值分配給選擇列表(即在表中)。指定一個值以從數據庫中選擇列表(在表中)

即使將值傳遞給它並且它肯定從我的控制器傳遞到視圖,該值默認爲第一個選項。

我也嘗試了一個不同的選擇列表,它正確地在我的表單上傳遞值,而且選擇列表也不起作用。所以我很確定它與表格有關

下面是值傳遞的截圖。 enter image description here

選擇列表

public IEnumerable<SelectListItem> ListViewStatusOptions 
{ 
    get 
    { 
     return new[] 
     { 
      new SelectListItem { Value = "Scheduled", Text = "Scheduled" }, 
      new SelectListItem { Value = "OFR-Out for Revision", Text = "OFR-Out for Revision" }, 
      new SelectListItem { Value = "Tool Work Required", Text = "Tool Work Required" }, 
      new SelectListItem { Value = "Delayed", Text = "Delayed" }, 
      new SelectListItem { Value = "In Press", Text = "In Press" }, 
     }; 
    } 
} 

選擇列表表

@foreach (var item in Model) { 
    <td> 
     @Html.DropDownListFor(modelItem => item.ListViewStatus, item.ListViewStatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id)}) 
    </td> 
} 

回答

0

對於值的列表的正確綁定將成爲:

for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(modelItem => modelItem[i].ListViewStatus, new SelectList(Model[i].ListViewStatusOptions, "Value", "Text", Model[i].ListViewStatus)) 
} 

您必須使用for循環而不是for-each,因爲如果使用foreach並且發佈的數據將不會通過操作方法解析,mvc將不會生成正確的輸入名稱

1

您需要使用的SelectList對象新SelectListItems的數組。

這個屬性添加到您的方法

public IEnumerable<SelectListItem> StatusOptions 
{ 
    get { return new SelectList(ListViewStatusOptions, "Value", "Name"); } 
} 

「價值」是一個包含每個項目的id屬性的名稱。您可以擁有任何類型的對象列表,而不僅僅是SelectListItems。這就是爲什麼似乎沒有必要傳遞「價值」,類似地,「名稱」是包含向用戶顯示內容的屬性。

然後改變你的剃鬚刀代碼

@foreach (var item in Model) { 
    <td> 
     @Html.DropDownListFor(modelItem => item.ListViewStatus, item.StatusOptions, "Select", new { @id = @Html.ValueFor(modelItem => item.Id)}) 
    </td> 
} 
+0

感謝您的回覆和解釋。我沒有得到這個代碼工作(我猜我做錯了),但它絕對把我放在正確的道路上,我現在有它的工作,我會發佈下面的代碼。在你的例子中,它看起來好像不是分配選定的值 – joetinger 2014-10-28 20:07:53

0

我的更新剃刀代碼。 正如@ScottMacMaster所解釋的,

您需要使用一個SelectList對象new一個SelectListItems數組。 「值」是包含每個項目的ID的屬性的名稱。 您可以擁有任何類型的對象列表,而不僅僅是SelectListItems。 這就是爲什麼看起來沒有必要傳遞「價值」,類似地,「名稱」 是包含向用戶顯示內容的屬性。

我接收到錯誤爲Name所以我改成了Text

我然後分配item.ListViewStatus作爲對象選擇的值

@Html.DropDownListFor(modelItem => item.ListViewStatus, new SelectList(item.ListViewStatusOptions, "Value", "Text",item.ListViewStatus), "Select", new { @id = @Html.ValueFor(modelItem => item.Id)})

+1

如果你在模型中設置屬性ListViewStatus的值,那麼這個選項就會被選中(所以如果你設置了'model.ListViewStatus =「Delayed 「'在你的控制器中,那麼第4項將被選中,你不需要上面的'SelectList()'中的第四個參數,事實上你不需要創建一個'SelectList',因爲它已經是'IEnumerable '(你只是這樣做了兩次!)然後閱讀MajoB的答案 - 你需要一個'for for循環,否則這個不會回發,並且爲什麼要創建多個'IEnumerable '實例(每個項目都有一個)? – 2014-10-29 00:09:44

+0

+1爲好的解釋 – joetinger 2014-10-29 12:56:20

相關問題