我想弄清楚這DropDownListFor如何工作,但沒有成功。
我控制器創建,我把所有的數據庫中找到的組SelectListItems列表:ASP.NET MVC2:DropDownListFor無法正常工作與多個選擇+ modelbinder
viewModel.Groups = LoadGroups(viewModel.User.AssociatedGroups);
這一點,方法:
private IList<SelectListItem> LoadGroups(List<String> associatedGroups)
{
var groups = _SecurityService
.LoadGroups()
.Select(e => new SelectListItem
{
Selected = associatedGroups.Contains<System.String>(e.Id.ToString()),
Value = e.Id.ToString(),
Text = e.Name
}).ToList();
return (groups);
}
正如你可以看到我設置選定的元素,如果有是列表中的關聯組。 我把這個列表中的字段(組)我的自定義視圖模型的:
public class UsersViewModel
{
public UsersViewModel()
{
this.Groups = new List<SelectListItem>();
}
public Models.User User { get; set; }
public IList<SelectListItem> Groups { get; set; }
}
和發送UsersViewModel到視圖。我用這個代碼來構建一個下拉多選:
<%=Html.DropDownListFor(m => m.User.AssociatedGroups, (List<System.Web.Mvc.SelectListItem>)Model.Groups, new { @class = "dropDownGroups", multiple = "multiple" })%>
AssociatedGroups是一場類用戶(這是我的視圖模型中的一員):
public List<String> AssociatedGroups { get; set; }
沒有什麼特殊的位置。 如果我使用此代碼,我可以看不到所選下拉列表中的元素(並且它們具有設置的屬性,我已經進行了雙重檢查),但是當我發佈表單時,我可以將選擇與AssociatedGroups綁定。 如果我改變了字符串AssociatedGroups(User類的字段):
public String AssociatedGroups { get; set; }
我有相反的行爲:
我可以看到下拉菜單的內容檢查,但是當我發帖的形式有沒有綁定,或更好,只綁定一個元素。 我花了我大部分時間試圖找出問題和我試過不同的組合,但他們都沒有工作。 有沒有人可以試圖幫助我?
謝謝。
感謝Darin,雖然我只是改變了SelectList中的DropDownListFor,但它很有幫助。我把所有的東西都保存下來,因爲我粘貼了它,而且效果很好。謝謝。 – LeftyX 2011-02-01 18:24:26