2012-04-13 60 views
0

我有一个下拉列表中的窗体,用DropDownListFor()实现。此视图强制键入ViewModel,该ViewModel具有SelectList属性来保存下拉列表的选项,然后是另一个用于保存下拉列表的选定值的属性。这工作正常,但我想要做的是,在我的第二个属性中同时保存选定的值和下拉列表中的选定文本。我想这样做的原因是,作为形式自我支持,我有两个选择的文本和价值。DropDownListFor()绑定值和文本到视图模型

我试着将选定的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, " ") 

回答

1

有服务器从每个请求的数据库(或内存中缓存)拉值。或者,使用javascript隐藏字段,只要下拉选择更改,就会使用适当的文本更新它。

0

更改视图模型的列表,然后用一个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; } 
+0

也许我没有足够清楚地解释问题。我不希望LeadTypeGroups有多个下拉菜单。这是一个下拉菜单。我想要做的就是在视图模型的一个属性中捕获选定的值和选定的文本。 – EkoostikMartin 2012-04-13 15:22:14

+0

为什么?您的属性(LeadTypeGroup)应该存储在您的数据库中,并且您应该使用Id - 为什么还需要文本? – Moo 2012-04-13 15:27:13

+0

好问题。在我的初始View发布表单之后,我会进行一些处理,但不要将表单值提交到数据库。 View HttpPost调用第二个视图(通过使用RedirectToAction),它将显示一个确认页面。此确认页面需要重新显示第一个视图中的选定值以及后端处理的结果。确认页面一旦提交,实际上会将更改提交到数据库。 – EkoostikMartin 2012-04-13 15:31:02