DropDownListFor()绑定值和文本到viewmodel

时间:2012-04-13 15:02:58

标签: asp.net-mvc asp.net-mvc-3 razor

我在带有下拉列表的View上有一个表单,使用DropDownListFor()实现。此View强烈地键入ViewModel,ViewModel具有SelectList属性以保存下拉列表的选项,然后另一个属性用于保存下拉列表的选定值。这工作正常,但我想要做的是,在我的第二个属性中保存选定值和下拉列表的选定文本。我想这样做的原因是,就像表单selfposts一样,我同时拥有每个选择的文本和值。

我尝试将选定的value属性从int更改为KeyValuePair,但只在表单提交时设置了对的int部分。

也许有更好的方法可以完成这项工作,我对所有建议持开放态度,包括对我的方法进行部分重新设计。

控制器(构建SelectList)

SelectList leadTypeGroups = new SelectList(_enrollmentRepository.GetLeadTypeGroups(), "Key", "Value");

视图模型

public KeyValuePair<int, string> LeadTypeGroupID { get; set; }
public SelectList LeadTypeGroups { get; set; }

查看

@Html.DropDownListFor(selected => Model.LeadTypeGroupID, Model.LeadTypeGroups, " ")

2 个答案:

答案 0 :(得分:1)

让服务器从每个请求中的数据库(或内存缓存)中提取值。或者,使用javascript隐藏字段,只要下拉选项发生更改,就会使用相应的文本对其进行更新。

答案 1 :(得分:0)

将ViewModel更改为List,然后使用for循环为列表中的每个项目吐出一个下拉列表。有点像...

查看

@for( int i = 0; i < Model.LeadTypeGroupIDs; i++ )
{
  @Html.DropDownListFor(x => Model.LeadTypeGroupIDs[i], Model.LeadTypeGroups, " ")
}

视图模型

public List<string> LeadTypeGroupIDs { get; set; }
public SelectList LeadTypeGroups { get; set; }