我有一个创建页面,允许用户从下拉列表中选择衬衫,用户还可以选择添加另一件衬衫,为此,用户点击添加按钮,动态创建新的下拉列表并添加到上一个下拉列表下方的页面。
我正在尝试在我的编辑页面中填充所有下拉列表,每个下拉列表都有选定的衬衫。下拉列表已成功添加并填充到编辑页面,但我无法将所选衬衫设置为用户在创建时选择的内容。
目前,我有一份清单列表。我遍历订单数据库中的衬衫名称列表,并将所选值设置为匹配名称为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>
}
答案 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
上设置SelectListItem
。 Html.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.Shirts
是Shirt
(或任何类持有shirtName
)个实例的列表。