5

我想使用 ExpandoObject 作为类型为 Razor 视图的视图模型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(在 nuget 中),您可以使用非常简洁的语法制作 ExpandoObjects 图表;

  dynamic Expando = Build<ExpandoObject>.NewObject;

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

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

我的立场是正确的,@gram 有正确的想法。但是,这仍然是修改您的概念的一种方法。

编辑

你必须给出.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 回答