2012-04-02 18 views
5

Qué me estoy perdiendo aquí?¿Enlazar una lista desplegable en mvc3 a un diccionario?

modelo de vista:

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

controlador:

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> 

error:

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

Respuesta

14

KeyValuePair tiene propiedades Key y Value. Usted es mejor declarar Entities tipo IEnumerable<Entity>, entonces su vista funcionaría como está:

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

O, si realmente necesita usar un diccionario <>, cambiar su punto de vista:

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

hi , gracias por responder, pero mis identificaciones no son contig. Resultados de vuelta de la lista a la que desean construir lista de selección y tienda seleccionada id es como: [2] = "Joes ent", [9] = "Johns ent" ... etc, ... y por eso deseo capturar la identificación seleccionada que corresponde a la identificación asociada en el modelo dstabase. – Mariah

+0

a continuación, cambiar su punto de vista a ''

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

+0

impresionante, THX !!!!!!! – Mariah

Cuestiones relacionadas