2015-09-25 72 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」))'它變得更容易理解。 –

相關問題