5

タイプ の Razor ビューのビューモデルとして ExpandoObject を使用したいと考えていますViewPage<dynamic>。これを行うとエラーが発生します

ExpandoObject o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);

これを機能させるにはどうすればよいですか?

4

4 に答える 4

15

この質問に記載されている拡張メソッドを使用して実行できます。

Razor の動的匿名型が原因で RuntimeBinderException が発生する

したがって、コントローラーのコードは次のようになります。

dynamic o = new ExpandoObject();
o.Stuff = new { Foo = "Bar" }.ToExpando();

return View(o);

そして、あなたの見解:

@model dynamic

@Model.Stuff.Bar
于 2011-06-24T15:12:11.850 に答える
4

オープン ソースのDynamitey (ナゲット) を使用すると、ExpandoObjects のグラフを非常にクリーンな構文で作成できます。

  dynamic Expando = Build<ExpandoObject>.NewObject;

  var o = Expando (
      stuff: Expando(foo:"bar")
  );

  return View(o);
于 2011-09-15T16:12:14.780 に答える
1

@gram は正しい考えを持っています。ただし、これはまだコンセプトを変更する 1 つの方法です。

編集

扱っているオブジェクトのタイプを知る必要があるため.stuff、タイプを指定する必要があります。dynamic

.stuff匿名型に設定すると内部になるため、@model dynamicここでは役に立ちません

ExpandoObject o = new ExpandoObject();
o.stuff = MyTypedObject() { Foo = "bar" };
return View(o);

MyTypedObjectそしてもちろん、

public class MyTypedObject
{
    public string Foo { get; set; }
}
于 2011-06-24T15:07:07.323 に答える
0

タイプを次のように設定してみてくださいdynamic

dynamic o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);

ExpandoObject に関するこの優れた投稿をご覧ください

于 2011-06-24T14:52:22.870 に答える