2017-08-14 56 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问题。