SelectItem列表列表,如何在视图中设置选中?

时间:2015-09-09 15:20:25

标签: c# asp.net-mvc razor

我有一个创建页面,允许用户从下拉列表中选择衬衫,用户还可以选择添加另一件衬衫,为此,用户点击添加按钮,动态创建新的下拉列表并添加到上一个下拉列表下方的页面。

我正在尝试在我的编辑页面中填充所有下拉列表,每个下拉列表都有选定的衬衫。下拉列表已成功添加并填充到编辑页面,但我无法将所选衬衫设置为用户在创建时选择的内容。

目前,我有一份清单列表。我遍历订单数据库中的衬衫名称列表,并将所选值设置为匹配名称为true的每个List。

我在模型被发送到视图之前中断并且一切都很好,我期望被选中的项是真的,但是,在我的视图中断,没有设置为选择。

这是我的控制器中的编辑功能

[HttpGet]
public ActionResult Edit(int? id)
{
    var mod = GetOrderInfo(id);

    //Call GetAllShirts, returns a IList<<SelectListItem> and sets the models List<SelectListItem> to that returned value
    mod.ShirtsList = GetAllShirts().ToList();

    List<List<SelectListItem>> shirtLists = new List<List<SelectListItem>>();

    //foreach shirt in mod.shirts, List<string>
    foreach (var shirt in mod.shirts)
    {
        //loop through List and set selected to true if it matches the current index value of the outer loop
        foreach (var item in mod.ShirtsList)
        {
            if (item.Value == shirt)
            {
                item.Selected = true;
                break;
            }
        }

        //add List<selectlistitem> to List
        shirtLists.Add(mod.ShirtsList);
    }

    //Set mods List<List<SelectListItem>> to shirtLists
    mod.shirtLists = shirtLists;

    return View(mod);
}

查看零件

@for (int i = 0; i < Model.shirtLists.Count; i++)
{
  <p>@Html.DropDownListFor(m => m.shirtName,Model.shirtLists[i] )</p>
}

1 个答案:

答案 0 :(得分:1)

每个下拉列表实际上并不需要唯一列表。以下内容可以正常使用:

  <p>@Html.DropDownListFor(m => m.Shirts[0].shirtName, Model.shirtLists)</p>
  ...
  <p>@Html.DropDownListFor(m => m.Shirts[1].shirtName, Model.shirtLists)</p>
  ...
  etc.

Model.shirtLists现在只有List<SelectListItem>而不是List<List<SelectListItem>>。您也不需要在每个Selected上设置SelectListItemHtml.DropDownListFor会根据当前shirtName的值自动呈现所选的匹配选项。

但是,您的问题可能是您将每个下拉列表绑定到同一属性Model.shirtName。这意味着页面上的最后一个下拉菜单获胜,无论发布什么都是值。您需要类似以下代码的内容:

@for (int i = 0; i < Model.Shirts.Count; i++)
{
  <p>@Html.DropDownListFor(m => m.Shirts[i].shirtName, Model.shirtLists)</p>
}

其中Model.ShirtsShirt(或任何类持有shirtName)个实例的列表。