我有一个名为InvestigatorGroupData
的实体,其中包含以下内容:
[DataContract]
public class InvestigatorGroupData
{
[DataMember]
public int InvestigatorGroupId { get; set; }
[DataMember]
public string InvestigatorGroupName { get; set; }
[DataMember]
public bool HasGameAssignment { get; set; }
}
我创建了以下视图模型:
public class InvestigatorGroupModel
{
public IEnumerable<InvestigatorGroupData> groupList {get;set;}
public int SelectedInvestigatorGroupId { get; set; }
}
并将其传递给视图如下:
InvestigatorGroupModel groupModel = new InvestigatorGroupModel();
GameClient proxy = new GameClient();
groupModel.groupList = proxy.GetInvestigatorGroups(User.Identity.GetUserId());
proxy.Close();
return View("SelectGroup", groupModel);
我的观点的下拉列表如下所示:
@Html.DropDownListFor(m => m.SelectedInvestigatorGroupId,new SelectList(Model.groupList, "InvestigatorGroupId", "InvestigatorGroupName"))
我希望用户能够选择InvestigatorGroupName
,并且要返回关联的InvestigatorGroupData
(不仅仅是选定的ID)。截至目前,仅返回/发布SelectedInvestigatorGroupId
并且groupList为空
非常感谢您的帮助!
答案 0 :(得分:1)
简单地说,使用DropDownListFor
是不可能的...... DropDownListFor
的参数1是模型中的字段,其中选择列表的value属性绑定到。
如果要在帖子上获得对整个对象实体的引用,则需要根据视图返回的ID执行数据库查找。
答案 1 :(得分:1)
使用您的示例:
InvestigatorGroupModel groupModel = new InvestigatorGroupModel();
GameClient proxy = new GameClient();
groupModel.groupList = proxy.GetInvestigatorGroups(User.Identity.GetUserId());
proxy.Close();
//Save the list of InvestigatorGroupData objects to be retrieved later
HttpContext.Current.Session["GroupList"] = groupModel.groupList;
return View("SelectGroup", groupModel);
然后在你的帖子控制器动作中:
//Grab the list of InvestigatorGroupData objects that was saved before
IEnumerable<InvestigatorGroupData> groupList = (IEnumerable<InvestigatorGroupData>)HttpContext.Current.Session["GroupList"];
int investigatorGroupId = groupModel.SelectedInvestigatorGroupId;
InvestigatorGroupData selectedGroup = groupList.Single(l => l.investigatorGroupId == investigatorGroupId);
selectedGroup
将是InvestigatorGroupData
对象,与下拉列表中的所选条目相对应。