2017-08-14 54 views
-1

我正在循環並嘗試更改列表中的「Selected」項目。@ Html.DropDownListFor選中的項目不工作

但是,默認項目未被選中。當我查看源html時,沒有「選定」參數。

這裏是我的類:

public List<SelectListItem> buyerDropdown { get; set; } 
public int selectedBuyer { get; set; } 

這裏是我的代碼:

@foreach (American_States state in Model.AmericanStates) 
    { 
     { 
      // change the "selected" buyer to match the buyer Id for this state 
      Model.buyerDropdown.Where(x => x.Value == Convert.ToString(state.Buyer.Id)).FirstOrDefault().Selected = true; 
     } 
     <tr> 
      <td>@state.name</td> 
      <td>@state.Title.OfficerName</td> 
      <td>@Html.DropDownListFor(model => model.selectedBuyer, Model.buyerDropdown, new { @class = "form-control" })</td> 
      <td></td> 
     </tr> 
    } 

當我踏進我的代碼可以看到SelectItemList正確的項目被更新爲「選擇」。

我看不到爲什麼沒有選擇下拉菜單中的正確項目?

UPDATE

基於T-羅伊現在我有這樣的代碼:

當調試正在計算正確的價值選擇的指數值,但下拉仍然沒有選擇默認值:

@foreach (American_States state in Model.AmericanStates) 
    { 
     { 
      // change the "selected" buyer to match the buyer Id for this state 
      string selectedOption = Model.buyerDropdown.Single(x => x.Value == Convert.ToString(state.HudHomeStore_Buyer.Id)).Value; 
     <tr> 
      <td>@state.name</td> 
      <td>@state.HudHomeStore_Title.OfficerName</td> 
      <td>@Html.DropDownListFor(model => model.selectedBuyer, new SelectList(Model.buyerDropdown, "Value", "Text", selectedOption), new { @class = "form-control" })</td> 
      <td></td> 
     </tr> 
     } 
    } 
+0

您的模型類如何處理selectedBuyer?它看起來像你在所有美國州使用相同的屬性? –

+0

你的代碼根本沒有意義。您可以在綁定到相同屬性的循環內創建多個下拉列表。您不僅會生成無效的html(重複的'id'屬性),而且只有第一個下拉菜單會在您提交時綁定到您的模型。你究竟想在這裏做什麼? –

+0

模型綁定通過綁定到您的屬性的值來工作,所以它的'selectedBuyer'的值決定了選擇的內容(如果selectedBuyer的值匹配其中一個選項值,那麼它將被選中,但這會使得在'foreach'循環中沒有任何意義 –

回答

0

首先,試圖找到根據了他們的ID的值..處理時,它的使用方法Single()因爲最佳實踐應該是唯一的。如果您使用.Where標記爲FirstOrDefault,則暗示可能有多個值相同的ID,而Single負責查找唯一唯一的記錄。

@foreach (American_States state in Model.AmericanStates) 
{ 
    { 
     int selectedOptionInt; 
     // change the "selected" buyer to match the buyer Id for this state 
     var selectedOption = Model.buyerDropdown.Single(x => x.Value == Convert.ToString(state.Buyer.Id)).FirstOrDefault().Value; 
     var isNumber = Int32.TryParse(selectedOption, selectedOptionInt); 
    } 
    <tr> 
     <td>@state.name</td> 
     <td>@state.Title.OfficerName</td> 
     <td>@Html.DropDownListFor(model => model.selectedBuyer, new SelectList(Model.buyerDropdown, "Key", "Value", selectedOptionInt), new { @class = "form-control" })</td> 
     <td></td> 
    </tr> 
} 

請讓我知道這是否有幫助。

+0

不幸的是,這不工作 - 但是,謝謝! –

+0

@TrevorDaniel是否'selectedOption'接收到正確的值? –

+0

正在計算正確的id,但下拉仍然拒絕使其成爲默認值 –

0

而不是foreach循環,你可能需要使用簡單的for循環。這是因爲生成的下拉列表的名稱屬性不會採用MVC預期的格式。我認爲命名需要索引器進行適當的綁定。這也將有助於您在使用foreach時可能遇到的POST問題。