如何使用foreach循环创建多个DropDownListFor
本文关键字:DropDownListFor 创建 循环 何使用 foreach | 更新日期: 2023-09-27 18:25:01
我有一个自定义对象的列表,我想为列表中的每个对象创建一个下拉列表。
我的模型的相关部分如下:
public class ColorModel
{
public enum Colors
{
Blue,
Red,
Yellow,
Green,
Purple
}
public Dictionary<string, int> Quantities
{
get
{
return new Dictionary<string, int>()
{
{"0", 0},
{"1", 1},
{"2", 2},
{"3", 3},
{"4", 4}
};
}
}
public List<AmountPerColor> ColorList { get; set; }
public class AmountPerColor
{
public Colors Color { get; set; }
public int Amount { get; set; }
}
}
ColorList启动为:
colorModel.ColorList = new List<ColorModel.AmountPerColor>()
{
new ColorModel.AmountPerColor() {Color = ColorModel.Colors.Blue, Amount = 4},
new ColorModel.AmountPerColor() {Color = ColorModel.Colors.Red, Amount = 1},
new ColorModel.AmountPerColor() {Color = ColorModel.Colors.Yellow, Amount = 0},
new ColorModel.AmountPerColor() {Color = ColorModel.Colors.Green, Amount = 2},
new ColorModel.AmountPerColor() {Color = ColorModel.Colors.Purple, Amount = 0}
};
视图:
@{ var i = 0; }
@foreach (var color in Model.ColorList)
{
<label>@color.Color</label>
@Html.DropDownListFor(x => x.ColorList[i].Amount, new SelectList(Model.Quantities, "key", "value", Model.ColorList[i].Amount), new { @name = @color.Color, @id = @color.Color })
i++;
}
这与一些其他参数一起封装在Html.BeginForm中,并发送到以下控制器方法:
public ActionResult Action(ColorModel colorModel)
{
//do controller stuff
}
问题是在控制器中,colorList按正确的顺序具有正确的数量,每个条目的Color属性值默认为"0"。我尝试将enum改为字符串,现在每个条目的属性都为null。还尝试使用EditorTemplate,正如这个问题的答案所建议的那样:在@foreach中绑定每个DropDownListFor。但是,该属性仍然为0或null。
在控制器中检索模型时,如何维护"颜色"属性?
问题是DropDownListFor只绑定到Amount属性。为了保留Color属性,我不得不将其添加到DropDownlistFor 下
@Html.HiddenFor(x => x.ColorList[i].Color)
在这行代码之后,为ColorList中的每个条目正确设置了Color属性。