2012-04-13 42 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