¿Cómo puedo usar DropDownListFor () en un tipo dinámico?

asp.net-mvc asp.net-mvc-3 drop-down-menu expression-trees html.dropdownlistfor

Pregunta

Obtengo el siguiente error en DropDownListFor() " Un árbol de expresiones puede no contener una operación dinámica " porque la lambda usa un tipo dinámico.

¿Cómo puedo configurar la opción seleccionada en DropDownList sin tener que recurrir a jQuery?

También preferiría no hacer una plantilla o ayuda personalizada.

Modelo

public class Thing : Base {
    public virtual Nullable<int> OptionID { get; set; }
    public virtual Option Option { get; set; }
}
public class Option : Base {
    public virtual ICollection<Thing> Things { get; set; }
}
public class Base {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Controlador

public ActionResult Edit(int Id) {
    return View(new ViewModel(context, new Thing()));
}

Ver

@model MvcApp7.Models.ViewModel
@{
    var Entity = (dynamic)Model.Entity;
}

@Html.DropDownListFor(x => Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)

ViewModel

public class ViewModel {
    public ViewModel(Context context, object entity) {
        this.Entity = entity;
        this.Options = new SelectList(context.Options, "Id", "Name");
    }
    public dynamic Entity { get; set; }
    public SelectList Options { get; set; }
}

EDIT : por favor disculpe Olvidé que podía especificar la opción seleccionada en la propia Lista de selección. Cambié la responsabilidad a ViewModel e intentaré lidiar con eso desde allí. Sin embargo, aún sería bueno saber cómo solucionar esto en la propia Vista en caso de que fuera necesario.

Hice esto en el ViewModel
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
y esto en la vista
@Html.DropDownList("OptionID", Model.Options)

Respuesta popular

Ver

@model MvcApp7.Models.ViewModel

@Html.DropDownListFor(x => x.Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)

ViewModel

public class ViewModel {
    public ViewModel(Context context, object entity) {
        this.Entity = entity;
        this.Options = new SelectList(context.Options, "Id", "Name");
    }
    public dynamic Entity { get; set; }
    public SelectList Options { get; set; }
}


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow