我有Model,它有以下字段:
public List<SelectListItem> Months
{
get
{
return new List<SelectListItem>
{
new SelectListItem {Text = "111", Value = "1"},
new SelectListItem {Text = "222", Value = "2"}
};
}
}
public List<TestModel> ServiceTest { get; set; }
TestModel
有一个字段:
public string Month { get; set; }
视野中的模型有ServiceTest = new List<ServiceTest> {new ServiceTest {Month = "2"}};
现在,问题。为什么这个
@Html.DropDownListFor(m => m.ServiceTest[0].Month, Model.Months)
不选择第二个值。但是这个
@Html.DropDownListFor(m => m.ServiceTest[0].Month, new SelectList(Model.Months, "Value", "Text", Model.ServiceTest[0].Month))
工作正确。 我真的不明白为什么第一个表达式无法正常工作。
答案 0 :(得分:2)
这是因为DropDownListFor帮助程序在绑定默认值时仅支持简单表达式。像x => x.SomeProp
这样的事情。在第一个示例中,您使用的是复杂的lambda表达式(Child属性索引器访问和另一个子属性)。
你的第二种方法是解决帮助者限制的正确方法。
答案 1 :(得分:0)
为了使第一个语句起作用,您需要提供它所绑定的List。
在班级中创建一个属性:
public string[] SelectedMonths { get; set; }
然后使用:
@Html.DropDownListFor(m => m.SelectedMonths, new SelectList(Model.Monthes, "Value", "Text", Model.SelectedMonths))