2012-04-02 18 views
5

Was fehlt mir hier?Eine Dropdown-Liste in mvc3 an ein Wörterbuch binden?

Ansichtsmodell:

public class ViewModel 
{ 
    public IDictionary<int, string> Entities { get; set; } 
    public int EntityId { get; set; } 
} 

Controller:

public override ActionResult Create(string id) 
    { 
     ViewModel = new ViewModel(); 

     IEnumerable<Entity> theEntities = (IEnumerable <Entity>)db.GetEntities(); 
     model.Entities= theEntities.ToDictionary(x => x.Id, x => x.Name); 

     return View(model);    
    } 

Ausblick:

<div class="editor-field">@Html.DropDownListFor(model => model.EntityId, 
    new SelectList(Model.Entities, "Id", "Name"))</div> 
</div> 

Fehler:

DataBinding: 'System.Collections.Generic.KeyValuePair....does not contain a property with the name 'Id'

Antwort

14

KeyValuePair hat Eigenschaften Key und Value. Sie sind besser dran Entities als Typ erklärt IEnumerable<Entity>, dann Ihrer Meinung nach funktionieren würde, wie sie ist:

public class ViewModel 
{ 
    public IEnumerable<Entity> Entities { get; set; } 
    public int EntityId { get; set; } 
} 

OR, wenn Sie wirklich ein Wörterbuch <> verwenden müssen, Ihre Ansicht ändern:

<div class="editor-field"> 
    @Html.DropDownListFor(model => model.EntityId, new SelectList(Model.Entities, "Key", "Value")) 
</div> 
+0

hallo , thx für die Antwort, aber meine IDs sind nicht Contig. Die Ergebnisse zurück von der Liste, zu der ich eine Auswahlliste erstellen und die ausgewählte ID speichern möchte, sind wie folgt: [2] = "Joes ent", [9] = "Johns ent" ... usw., ... deshalb möchte ich Erfassen Sie die ausgewählte ID, die der zugeordneten ID im dstabase-Modell entspricht. – Mariah

+0

Dann ändern Sie Ihre Ansicht zu '

@Html.DropDownListFor(model => model.EntityId, new SelectList(Model.Entities, "Key", "Value"))
' – Keith

+0

Ehrfürchtig, thx !!!!!!! – Mariah

Verwandte Themen