Post表单在Model中获取null值

时间:2012-11-09 15:32:04

标签: c# asp.net-mvc-3 razor viewmodel

当我提交表单时,我的ViewModel中的Courses List会获得空值。 这是我的ViewModel:

public class CandidateViewModel
{
    public string Name { get; set; }
    public IList<CourseViewModel> Courses { get; set; }

    public CandidateViewModel()
    {
        Name = "Kiwanax";
        Courses = new List<CourseViewModel>();
        for (int count = 0; count < 5; ++count)
        {
            Courses.Add(new CourseViewModel( 
                string.Format("Course_{0}", count), 5));
        }
    } 
}

public class CourseViewModel
{
    public long ID { get; set; }
    public string Name { get; set; }
    public OptionViewModel SelectedOption { get; set; }
    public IList<OptionViewModel> Options { get; set; }

    public CourseViewModel(string name, int numberOfOptions) 
    {
        Name = name;
        Options = new List<OptionViewModel>();
        for (int count = 1; count <= numberOfOptions; ++count)
        {
            Options.Add(new OptionViewModel(count.ToString(), 
                string.Format("Option {0}", count)));
        }
        SelectedOption = Options[0];
    }
}

public class OptionViewModel
{
    public string Value { get; set; }
    public string Description { get; set; }
}

行。当我根据我的IList创建DropDownLists时,它可以正常工作。

<ul id="cursos">
@for (int count = 0; count < Model.Courses.Count; ++count)
{
    <li>
        @Html.DropDownListFor(i => i.Courses[count].SelectedOption,
            new SelectList(Model.Courses[count].Options, "Value", "Description", Model.Courses[count].SelectedOption))
                @Html.HiddenFor(i => i.Courses[count].ID)
                @Model.Courses[count].Name
            </li>
        }
        </ul>

但是,当我从我的表单发帖时,我从该IList获取空值。

1 个答案:

答案 0 :(得分:0)

您无法将下拉列表绑定到复杂的属性值:

i => i.Courses[count].SelectedOption

必须绑定到将发送到服务器的相应基元类型:

i => i.Courses[count].SelectedOption.Value

请记住,在HTML中,<select>元素仅将所选值作为简单字符串类型发送到服务器。