无法将新选定的下拉列值传递给控制器

时间:2015-02-23 21:54:34

标签: asp.net-mvc razor

我有一个MVC应用程序。这是我的代码的一部分:

查看型号:

public class StudentViewModel
{
    public int Id { get; set; }
    public int? DepartmentId { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }

    public IEnumerable<SelectListItem> AllDepartments { get; set; }
}

查看:

@Html.DropDownListFor(model => model.DepartmentId, Model.AllDepartments)

控制器:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(StudentViewModel studentViewModel)
    {

用户在下拉列表中更改部门选择并提交后,由于某种原因,studentViewModel.DepartmentId包含旧的DepartmentId。 studentViewModel.Name确实包含新值。你能解释我错过的东西吗?

感谢。

1 个答案:

答案 0 :(得分:2)

在评论中,您在下拉列表中添加了属性DepartmentId的另一个控件。 DefaultModelBinder按顺序读取所有表单值(加上路由值,查询字符串值等)。设置属性值后,将忽略同一属性的任何后续值。