Wie kann ich DropDownListFor () für einen dynamischen Typ verwenden?

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

Frage

Ich bekomme den folgenden Fehler in der DropDownListFor() " Eine Ausdrucksbaumstruktur darf keine dynamische Operation enthalten ", da das Lambda einen dynamischen Typ verwendet.

Wie kann ich die ausgewählte Option in der DropDownList festlegen, ohne auf jQuery zurückzugreifen?

Ich würde auch lieber keine Vorlage oder einen benutzerdefinierten Helfer machen.

Modell

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

Regler

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

Aussicht

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

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

Ansichtsmodell

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 : Bitte entschuldigen Sie. Ich habe vergessen, dass ich die ausgewählte Option in der SelectList selbst angeben konnte. Ich habe die Verantwortung in das ViewModel verschoben und werde versuchen, von dort aus damit umzugehen. Es wäre jedoch immer noch gut zu wissen, wie man dies im View selbst umgehen kann, falls es notwendig sein sollte.

Ich habe das im ViewModel gemacht
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
und das in der Ansicht
@Html.DropDownList("OptionID", Model.Options)

Beliebte Antwort

Aussicht

@model MvcApp7.Models.ViewModel

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

Ansichtsmodell

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow