2013-04-09 26 views
5
class User() { 
    public List<Customer> Customers; 
} 

class Customer() { 
    public long Id; 
    public string Name; 
} 

I wypełnić wybrane elementyJak wyświetlić multi-select listy z listy <MyObject>

User MyUser = new User(); 
MyUser.Customers = db.Customers.Where(...).ToList(); 

przekazać listę wszystkich elementów w ten sposób

ViewBag.Customers = db.Customers.OrderBy(c => c.Name).ToList(); 

moim zdaniem i chcesz aby wyświetlić go jak wielozadaniowy element HTML z wybranymi elementami (ViewBag.Customers) i (MyUser.Customers). Próbowałem z

@model MySCL.Models.User 

@Html.ListBoxFor(m => m.Customers, new MultiSelectList(ViewBag.Customers, "Id", "Name"), new {Multiple = "multiple", size = "5" }) 

ale wyświetla tylko pełną listę bez wybierać żadnych przedmiotów. Czy to najlepsza praktyka? Czy istnieje inny lepszy sposób? Zamiast listy klientów, jeśli mam listę ciągów znaków, jak mogę to zrobić?

+1

Rick Anderson zna sztuczki http://www.asp.net/mvc/tutorials/javascript/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with -aspnet-mvc – Komengem

Odpowiedz

1

MultiSelectList constructor bierze również IEnumerable listę elementów do wyboru, więc jeśli zmienisz swój kod do:

new MultiSelectList(ViewBag.Customers, "Id", "Name", Model.Customers) 

lista powinna następnie rozpocząć ze wszystkimi pozycjami klienta wybranych.

+0

Chcę rozpocząć od wszystkich elementów (ViewBag.Customers, który zawiera wszystkich klientów) na mojej liście i (MyUser.Customers, który jest podzbiorem ViewBag.Customers), jak zaznaczono. – whiteproud

+0

Następnie czwarty parametr zamienia się w Model.Customers. –

1

Rozwiązałem, przekazując 4 parametr jako listę int lub string z jedynym kluczem obiektów, a nie listą obiektów.

new MultiSelectList(ViewBag.Customers, "Id", "Name", Model.Customers.Select(c => c.Id))