我想使用ExpandoObject作为类型ViewPage<dynamic>
的Razor视图的viewmodel。我这样做时出错了
ExpandoObject o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);
我该怎么做才能使这项工作?
答案 0 :(得分:13)
您可以使用此问题中提到的扩展方法来执行此操作:
Dynamic Anonymous type in Razor causes RuntimeBinderException
所以你的控制器代码如下:
dynamic o = new ExpandoObject();
o.Stuff = new { Foo = "Bar" }.ToExpando();
return View(o);
然后你的观点:
@model dynamic
@Model.Stuff.Bar
答案 1 :(得分:4)
使用开源Dynamitey(在nuget中)您可以使用非常clean syntax制作ExpandoObjects的图形;
dynamic Expando = Build<ExpandoObject>.NewObject;
var o = Expando (
stuff: Expando(foo:"bar")
);
return View(o);
答案 2 :(得分: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; }
}
答案 3 :(得分:0)
尝试将类型设置为dynamic
dynamic o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);
在ExpandoObject
上浏览这个优秀的post