我正在循环并尝试动态更改列表中的“已选定”项目。
但是,未选择默认项目。当我查看源html时,没有“selected”参数。
这是我的班级:
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中正确的项目被更新为“已选择”。
我看不出为什么没有选择下拉列表中的正确项目?
更新
基于T-Roy我现在有了这段代码:
当我调试时,正在为所选索引值计算正确的值,但下拉列表仍然没有选择默认值:
@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 :(得分:0)
首先,在处理尝试根据ID
来查找值时...最佳做法是使用Single()
方法,因为ID
应该是唯一的。如果您使用.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>
}
记录。
videoid
如果有帮助,请告诉我。
答案 1 :(得分:0)
而不是foreach循环,您可能需要使用简单的for循环。这是因为生成的下拉列表的name属性不是MVC预期的格式。我认为命名需要索引器才能正确绑定。这也有助于您在使用foreach时可能遇到的POST问题。
@for (int i = 0; i < Model.AmericanStates.Count(); i++)
{
{
// 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();
}
<tr>
// Other controls
<td>@Html.DropDownListFor(model => model.AmericanStates[i].selectedBuyer, new SelectList(Model.buyerDropdown, "Key", "Value", selectedOption), new { @class = "form-control" })</td>
<td></td>
</tr>
}