DropDownListFor在收集第一个元素时不选择值

时间:2013-12-16 08:51:25

标签: c# asp.net-mvc html.dropdownlistfor

我有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))

工作正确。 我真的不明白为什么第一个表达式无法正常工作。

2 个答案:

答案 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))