2013-02-06 102 views
3

我有一個場景,我想從複選框列表中選擇3個項目。這工作正常,但如果複選框的列表變長,該頁面看起來很笨重。所以我想把它改成3個下拉列表。所以頁面要小很多,但是沒有一個下拉列表會兌現選定的值。將數組綁定到多個DropDownListFor

所以,我想這樣的代碼

@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 0 ? Model.CheckedLarcenyTypes[0] : null as Int32?), String.Empty, new { id = "Larceny1" }) 
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 1 ? Model.CheckedLarcenyTypes[1] : null as Int32?), String.Empty, new { id = "Larceny2" }) 
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 2 ? Model.CheckedLarcenyTypes[2] : null as Int32?), String.Empty, new { id = "Larceny3" }) 

現在的下拉列表中正確創建和正確的價值得到約束,並在文章中,我看到的視圖模型的價值越來越被送回。

我只是不能得到selectvalue顯示在下拉列表中。在重新加載頁面時,下拉菜單仍然是空白的。

我在這裏做錯了什麼?這甚至有可能嗎?

+0

嗨弗蘭,如果列表很長,爲什麼不考慮一個替代解決方案,比如實現一個jQuery選擇列表插件就像在http://loopj.com/jquery-tokeninput/中找到的一樣,看看它是否會滿足你的情況?與複選框列表不同,這將顯示一個下拉列表,您可以從中選取條目。您選擇的每個條目將在文本區域內列出 –

回答

2

您的問題與here有關。

如果您使用的是相同的模型回發期間接受來自編輯視圖 輸入讀選擇

,你可能會覺得默認的模型綁定將 重新填充專輯集合了所有的專輯信息和 設置選定的相冊。不幸的是 - 網絡不能以這種方式工作 和專輯收藏將是空的。

所以,你必須有這樣的視圖模型:

public class LarcenyViewModel 
{ 
    public int CheckedLarcenyType1 { get; set; } 
    public int CheckedLarcenyType2 { get; set; } 
    public int CheckedLarcenyType3 { get; set; }    
    public IEnumerable<SelectListItem> LarcenyTypes { get; set; } 
} 

填充視圖模型是這樣的:

LarcenyViewModel larcenyViewModel = new LarcenyViewModel(); 

// Use a database, enum or whatever to get the LarcenyTypes... :) 
larcenyViewModel.LarcenyTypes = new SelectList(
       database.FindAllLarcenyTypes(), "LarcenyId", "Name"); 

查看代碼:

@Html.DropDownListFor(model => model.CheckedLarcenyType1, Model.LarcenyTypes, String.Empty, new { id = "Larceny1" }) 
@Html.DropDownListFor(model => model.CheckedLarcenyType2, Model.LarcenyTypes, String.Empty, new { id = "Larceny2" }) 
@Html.DropDownListFor(model => model.CheckedLarcenyType3, Model.LarcenyTypes, String.Empty, new { id = "Larceny3" }) 
+0

我已閱讀您提到的帖子,實際上不是我看到的問題。我不希望模型聯編程序綁定整個對象。我只是希望dropdownlist能像其他任何html對象一樣工作。如果輸入對象有一個名稱,我的理解是它將綁定來自所有同名對象的值,它將這些項的值綁定到它的任何類型的數組中。我似乎已經留下了一個關鍵部分,這是我的視圖模型。 CheckedLarcenyTypes被定義爲Int32 []。這應該允許模型聯編程序綁定這些值。 – Fran

+0

我明白你對此的失望,但是使用「ASP.NET MVC」的東西並不適用於這種方式。我建議你閱讀這篇文章,瞭解如何建模綁定到列表和數組類型:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx –

+0

我創建了一個示例該應用程序顯示瞭如何在操作方法中綁定到數組參數。你可以看看這裏:https://github.com/leniel/AspNetMvcArrayDataBinding –

相關問題