如何在动态类型上使用DropDownListFor()?

时间:2011-07-30 19:45:12

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

我在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)

1 个答案:

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