Pregunta ¿Enlazar una lista desplegable en mvc3 a un diccionario?


¿Que me estoy perdiendo aqui?

ViewModel:

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

Ver:

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

Error:

DataBinding: 'System.Collections.Generic.KeyValuePair .... no   contener una propiedad con el nombre 'Id'


5
2018-04-02 21:12


origen


Respuestas:


KeyValuePair tiene propiedades Key y Value. Estás mejor declarando Entities como 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 necesitas usar un Diccionario <>, cambia tu vista:

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

14
2018-04-02 21:16