我在DropDownListFor()
中遇到以下错误表达式树可能不包含动态操作“因为lambda使用动态类型。
如何在不使用jQuery的情况下在DropDownList上设置所选选项?
我也不想制作模板或自定义助手。
模型
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; }
}
控制器
public ActionResult Edit(int Id) {
return View(new ViewModel(context, new Thing()));
}
查看
@model MvcApp7.Models.ViewModel
@{
var Entity = (dynamic)Model.Entity;
}
@Html.DropDownListFor(x => Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)
视图模型
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; }
}
编辑:请原谅。我忘了我可以在SelectList本身中指定所选的选项。我将责任转移到ViewModel中,并尝试从那里处理它。但是,如果有必要,知道如何在View中解决这个问题仍然很好。
我在ViewModel中这样做了
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
这在视图中
@Html.DropDownList("OptionID", Model.Options)
答案 0 :(得分:0)
查看强>
@model MvcApp7.Models.ViewModel
@Html.DropDownListFor(x => x.Entity.OptionID , (System.Web.Mvc.SelectList)Model.Options)
<强>视图模型强>
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; }
}