0
ラムダがダイナミックタイプを使用しているため、DropDownListFor()
「表現ツリーには動的操作」が含まれていない可能性があります。ダイナミックタイプでDropDownListFor()を使用するにはどうすればよいですか?
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)
ヴィwModel
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:私の言い訳をしてください。私はSelectList自体で選択されたオプションを指定できることを忘れていました。責任をViewModelに移し、そこから対処しようとします。しかし、必要であれば、View自体でこれを回避する方法を知っておくことは、まだ良いことです。
は私が見る
@Html.DropDownList("OptionID", Model.Options)
返事をありがとうPeter。これは私が試した最初のもので、同じエラーが出ます。 'CS1963:式ツリーには動的操作が含まれていない可能性があります。だからこそ、私はキャスティングを試みました。 – Benjamin
申し訳ありません。それはうまくコンパイルされたので、私はそれが動作すると仮定した。 – Peter
一般的なインターフェイスを持つ汎用ビューモデルを使用できますか? 'ViewModel T:IHasOptions'のようなものです。 –
Peter