Comment utiliser DropDownListFor () sur un type dynamique?

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

Question

J'obtiens l'erreur suivante dans DropDownListFor() " Un arbre d'expression ne contient pas d'opération dynamique " car le lambda utilise un type dynamique.

Comment définir l'option sélectionnée sur DropDownList sans recourir à jQuery?

Je préférerais également ne pas créer de modèle ni d’assistant personnalisé.

Modèle

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

Manette

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

Vue

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

ViewModel

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

EDIT : S'il vous plaît pardonnez-moi. J'ai oublié que je pouvais spécifier l'option sélectionnée dans la liste de sélection proprement dite. J'ai transféré la responsabilité dans le ViewModel et j'essayerai d'y faire face à partir de là. Cependant, il serait toujours bon de savoir comment contourner ce problème dans la vue elle-même, le cas échéant.

Je l'ai fait dans le ViewModel
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
et ceci dans la vue
@Html.DropDownList("OptionID", Model.Options)

Réponse populaire

Vue

@model MvcApp7.Models.ViewModel

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

ViewModel

@model MvcApp7.Models.ViewModel

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi