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

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

Multi-Select-Liste anzuzeigen bevölkern ich die ausgewählten ElementeWie aus Liste <MyObject>

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

ich die Liste aller Elemente auf diese Weise

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

meiner Ansicht nach passieren ich will um es wie ein Mehrfachauswahl-HTML-Element mit allen Elementen (ViewBag.Customers) und (MyUser.Customers) wie ausgewählt anzuzeigen. Ich habe versucht, mit

@model MySCL.Models.User 

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

aber nur die vollständige Liste anzuzeigen, ohne alle Elemente auszuwählen. Ist dies die beste Vorgehensweise? Gibt es einen anderen besseren Weg? Anstelle einer Liste von Kunden, wenn ich eine Liste von String hatte, wie kann ich es tun?

+1

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

Antwort

1

Die MultiSelectList constructor auch eine IEnumerable Liste der Elemente ausgewählt werden, erfolgt, so dass, wenn Sie Ihren Code ändern:

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

Die Liste sollte dann mit all den Kunden Produkte starten ausgewählt.

+0

Ich möchte mit allen Elementen (ViewBag.Customers, die alle Kunden enthält) in meiner Liste und (MyUser.Customers, die eine Untergruppe von ViewBag.Customers ist) wie ausgewählt werden. – whiteproud

+0

Dann wird der vierte Parameter Model.Customers. –

1

Ich gelöst, indem Sie den 4. Parameter als Liste von int oder Zeichenfolge mit dem einzigen Schlüssel der Objekte und nicht eine Liste von Objekten übergeben.

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