我有一个自定义对象列表,我想为列表中的每个对象创建一个下拉列表。
我模型的相关部分如下所示:
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-property的值默认为&#34; 0&#34;对于每个条目。我尝试将枚举更改为字符串,并且每个条目的属性现在都为null。还尝试使用EditorTemplate,如此问题的答案所示:Binding each DropDownListFor within @foreach。但是,该属性仍为0或null。
当我在控制器中检索模型时,如何维护Color属性?
答案 0 :(得分:1)
问题是DropDownListFor仅绑定到Amount属性。为了保持Color属性,我必须在DropDownlistFor
下添加它@Html.HiddenFor(x => x.ColorList[i].Color)
在该行代码之后,为ColorList中的每个条目正确设置了Color-property。