我想在类型为ViewPage<dynamic>
的Razor视图中使用ExpandoObject作为视图模型。但是这样做会出现错误。
ExpandoObject o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);
我应该怎么做才能让这个工作起来?
我想在类型为ViewPage<dynamic>
的Razor视图中使用ExpandoObject作为视图模型。但是这样做会出现错误。
ExpandoObject o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);
我应该怎么做才能让这个工作起来?
你可以使用在这个问题中提到的扩展方法来实现:
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
我必须纠正一下,@gram的想法是正确的。然而,这仍然是修改您概念的一种方法。
您必须给.stuff
一个类型,因为dynamic
必须知道它正在处理什么类型的对象。
.stuff
在设置为匿名类型时变为internal,因此@model dynamic
在这里对您没有帮助
ExpandoObject o = new ExpandoObject();
o.stuff = MyTypedObject() { Foo = "bar" };
return View(o);
当然,还有MyTypedObject
:
public class MyTypedObject
{
public string Foo { get; set; }
}
MyTypedObject
,最好放弃动态使用并回到强类型的视图模型:\ - kenwarnerdynamic
。dynamic o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);
@Model.stuff.Foo
呢?dynamic
对象必须知道其处理的对象类型。 - David Fox
ctx.Foo.Select(x => new { Foo = "bar" }.ToExpandoObject()).SingleOrDefault()
这样的事情,而我应该做的是ctx.Foo.Select(x => new { Foo = "bar" }).SingleOrDefault().ToExpandoObject()
。 - kenwarner