2012-04-02 18 views
5

Cosa mi manca qui?Binding a dropdownlist in mvc3 ad un dizionario?

ViewModel:

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);    
    } 

Vista:

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

Errore:

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

risposta

14

KeyValuePair ha proprietà Key e Value. Si sta meglio dichiarando Entities come tipo IEnumerable<Entity>, allora la vostra vista potrebbe funzionare così com'è:

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

O, se si ha realmente bisogno di utilizzare un dizionario <>, modificare la vista:

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

hi , grazie per la risposta, ma i miei id non sono contig. I risultati di ritorno dalla lista a cui desidero costruire la lista di selezione e memorizzare l'id selezionato sono come: [2] = "Joes ent", [9] = "Johns ent" ... ecc., Ecco perché desidero cattura l'id selezionato che corrisponde all'ID associato nel modello dstabase. – Mariah

+0

Quindi cambia la tua vista a '

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

+0

Impressionante, grazie !!!!!!! – Mariah

Problemi correlati