MVC - 可以 "SelectList" return 选定的对象吗?

MVC - Can a "SelectList" return the selected object?

得到对象列表,likaso(伪代码):

class PersonViewModel{name, age, etc}
class MyObjectViewModel
{
    //actually comes from WebService, but that doesnt matter here
    List<PersonViewModel> AllPeople= {person1,person2, etc}
    PersonViewModel SelectedPerson;
}

所以我想允许用户从下拉列表中 select 一个人:

@model MyModels.MyObjectViewModel

@Html.DropDownListFor(MyObjectViewModel=> MyObjectViewModel.SelectedPerson , new SelectList(Model.AllPeople))

视图和下拉菜单已正确填充。

当我点击提交时,控制器总是得到 myObjectViewModel.SelectedPerson == Null。 为什么它 return 什么都没有?我如何 return selected 对象?

Html.DropDownListFor 无法将 PersonViewModel 创建为所选人员。虽然它可以 return 一个 Id 选定的人,但你必须从你的 service/session/database 等中获取所有其他字段。假​​设 PersonViewModel 有一个 IdName 属性这是你应该做的:

class MyObjectViewModel
{
    //actually comes from WebService, but that doesnt matter here
    List<PersonViewModel> AllPeople= {person1,person2, etc}
    int SelectedPersonId;
}

@model MyModels.MyObjectViewModel

@Html.DropDownListFor(m=> m.SelectedPersonId, 
      Model.AllPeople.Select(p=>new SelectListItem{Value = p.Id, Text=p.Name}))

在您发布的操作中,您将 MyObjectViewModel.SelectedPersonId 填充所选人员的 ID。然后您将能够使用它来获得您的 PersonViewModel