@ Html.DropDownListFor所选项目不起作用

时间:2017-08-14 13:25:28

标签: c# asp.net-mvc razor

我正在循环并尝试动态更改列表中的“已选定”项目。

但是,未选择默认项目。当我查看源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>
        }
    }

2 个答案:

答案 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>
}