2015-09-25 73 views
0

得到对象的名单,likaso(伪代码):MVC - “SelectList”可以返回选定的对象吗?

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

所以我想允许用户从下拉菜单中选择一个人:

@model MyModels.MyObjectViewModel 

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

视图和下拉菜单中已正确安装。

当我点击提交控制器总是得到myObjectViewModel.SelectedPerson == Null。 为什么它没有返回任何东西?我怎样才能返回选定的对象?

+0

您的选择列表的值与您选择的人员var之间的类型是否有差异? –

+0

没有我更正了示例(签入代码后),其所有视图模型: 这里的类实际代码: '[Display(Name =“Titular”)] public EntidadeViewModel Titular {get;组; } public List Titulares {get;组; }' –

回答

2

Html.DropDownListFor无法创建PersonViewModel作为选定的人。虽然它可以返回选定人员的Id,你必须从你的服务/会话/数据库中的所有超视距雷达场等假设PersonViewModelIdName性质,这是你应该做的:

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

+0

正确,它只使用简单的类。刚刚发现这样做更简单: '@ Html.DropDownListFor(m => m.SelectedPersonId,new SelectList(Model.AllPeople,“Id”,“Name”))'它变得更容易理解。 –

相关问题