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)

答えて

0

ビュー

@model MvcApp7.Models.ViewModel 

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

のViewModel

でこれをViewModelに
this.Options = new SelectList(context.Options, "Id", "Name", this.Entity.OptionID);
でこれを行なったし、
+0

返事をありがとうPeter。これは私が試した最初のもので、同じエラーが出ます。 'CS1963:式ツリーには動的操作が含まれていない可能性があります。だからこそ、私はキャスティングを試みました。 – Benjamin

+0

申し訳ありません。それはうまくコンパイルされたので、私はそれが動作すると仮定した。 – Peter

+0

一般的なインターフェイスを持つ汎用ビューモデルを使用できますか? 'ViewModel T:IHasOptions'のようなものです。 – Peter

関連する問題