2016-03-28 12 views
0

Ich habe ein Dropdown-Menü, in dem Sie mehrere Optionen auswählen können. enter image description hereC# Ist es möglich, mehrere Optionen zu binden?

Der Code für diesen Drop-Down ist: enter image description here

Wie kann ich mehr ‚Geräte‘ in C# binden, so dass, wenn dieses Dropdown Modell Bindung automatisch alle Optionen auswählen, die in die Ansicht übergeben wird geladen ?

+1

Mögliches Duplikat von [Html.DropDownListFür den ausgewählten Wert wird nicht festgelegt] (http://stackoverflow.com/questions/19476530/html-dropdownlistfor-selected-value-not-being-set) –

Antwort

1

Für Ihren Fall arbeiten, sollten Sie einen anderen Helfer verwenden - @Html.ListBoxFor es select Element mit multiple Attribut erzeugen sollte.

//note that i use MaintanceDevices property 
@Html.ListBoxFor(x => x.MaintanceDevices, new SelectList(Model.Devises, "ID", "Description"), new { @class = "multiselect form-control"}) 

Auch nicht setzen id Attribut in Helfer. Es ist besser, ein andere Eigenschaft in Ihrem Ansichtsmodell zu erstellen:

public List<int> MaintanceDevices { get; set; } 

Bestücken Sie es in Controller-und MVC automatisch richtigen Markup für Ihr select Element bindet in Form auf POST erzeugen.

1

Geräteeigenschaft in Ihrem Modell sollte eine Liste von IDs sein (wo ist ein einfacher Typ wie int oder eine Zeichenfolge) und keine Liste von Gerätemodellen (Da Sie new SelectList(Model.Devices, "ID", "Description") im Helper verwenden, sehe ich dieses Modell. Geräte sind eine Sammlung von komplexem Objekt)

Also Ihr Modell aussehen soll:

public List<Device> AvailableDevices { get;set; } 

public List<string> Devices { get;set; } 

und der Helfer sollte

@Html.ListBoxFor(m=>m.Devices,new SelectList(Model.AvailableDevices , "ID", "Description")) 
seine

oder

@Html.DropDownListFor(m=>m.Devices,new SelectList(Model.AvailableDevices , "ID", "Description", new {multiple="multiple"}) 

Post Aktion sollte entweder ein List<string> als Argument oder ein komplettes Modell:

[HttpPost] 
public ActionResult Submit(List<string> devices) 

oder

[HttpPost] 
public ActionResult Submit(YourModel model) 
//where YourModel model is the same type that you are using to render your view 
1

In diesen Situationen, ich würde in dem Viewmodel folgendes tut

public string Devices { get; set; } 
List<int> innerList; 
public List<int> List 
{ 
    get 
    { 
     if (this.innerList == null) 
     { 
      if (string.IsNullOrEmpty(this.Devices)) 
      { 
       this.innerList = this.Devices.Split(',').Select(x => int.Parse(x)).ToList(); 
      } 
      else 
      { 
       this.innerList = new List<int>(); 
      } 
     } 

     return this.innerList; 
    } 
} 

Dabei steht Devices für die binded -Eigenschaft mit der Dropdown-Liste, die alle Elemente zurückgibt, die durch , getrennt sind. Wenn Sie versuchen, auf List zuzugreifen, werden die Elemente getrennt und als List<int> zurückgegeben.

und ich bin es int Parsen weil normalerweise ich sehe int ist, als ID des

Aber ich freu mich für eine bessere Option.

PS

ich dies tun, wenn sie mit Select2

Verwandte Themen